2015-07-28 3 views
1

Я сгенерировал и импортировал модуль, содержащий тест, который я хочу запустить с nose2. Вот код, который создает и импортировать модуль:нос2: запустить тесты из импортированного модуля

import sys 
import imp 
import nose2 


def import_code(code, name): 
    module = imp.new_module(name) 
    exec code in module.__dict__ 
    sys.modules[name] = module 
    return module 

code_to_test = (""" 
def test_foo(): 
    print "hello test_foo" 
""") 

module_to_test = import_code(code_to_test, 'moduletotest') 

# now how can I tell nose2 to run the test? 

Edit: я работал вокруг проблемы путем использования временных файлов. Он работает для меня, но мне все еще интересно, как это сделать, динамически генерируя модуль. Вот код для этого с временным файлом:

import tempfile 
import nose2 
import os 


def run_test_from_temp_file(): 
    (_, temp_file) = tempfile.mkstemp(prefix='test_', suffix='.py') 
    code = (""" 
def test_foo(): 
    print 'hello foo' 
""") 
    with open(temp_file, 'w') as f: 
     f.write(code) 
    path_to_temp_file = os.path.dirname(temp_file) 
    module = os.path.splitext(os.path.basename(temp_file))[0] 
    nose2_args = ['fake_arg_to_fool_nose', module, '--verbose', '-s', 
        path_to_temp_file] 
    nose2.discover(argv=nose2_args, exit=False) 

ответ

-1

Существует два способа выполнения носа. Существует отдельная программа, которая поставляется с распределением, называемым nosetests. Вы можете передать файл с UnitTests в качестве опции:

nosetests unittests.py

Или укажите модуль:

nosetests mymodule.test

Или, альтернативно, в вашем тестовом модуле вы можете позвонить в библиотеку носа и попросить его запустить, вызвав в программе программу nose.main() или nose.run().

+2

Это для носа, но я использую нос2. Я знаю, как запустить нос2 из скрипта уже: 'nose2.discover (argv = ['fake_arg', 'mypkg.mymod.test_foo', 's', '.')', Но это будет загружать тесты, импортируя модули, в то время как я хочу загрузить тесты из модуля, который уже является импортером. –