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