我生成并导入了一个包含我想用nose2
运行的测试的模块。以下是创建和导入模块的代码:
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?
编辑:我通过使用临时文件解决了这个问题。它适用于我,但我仍然对如何通过动态生成模块感到好奇。以下是使用临时文件执行此操作的代码:
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)
答案 0 :(得分:0)
如果有人对如何用鼻子做这件事感兴趣(不是鼻子2——我没试过),这里是:
from nose.loader import TestLoader
from nose import run
modules_to_test = [module_to_test]
test_loader = TestLoader()
context_suites = list(map(test_loader.loadTestsFromModule, modules_to_test))
run(suite=context_suites, argv=['-s', '-v'])
其中 module_to_test
是问题中提到的包含测试的模块。我已经使用 -s
和 -v
参数来演示如何像在命令行上一样传递其他参数,但它们不是必需的。上述解决方案还可以通过在 modules_to_test
列表中放置其他模块来处理多个模块。
答案 1 :(得分:-1)
有两种方法可以执行鼻子。有一个名为nosetests的发行版附带的独立程序。您可以将单元测试作为选项传递给您的文件:
nosetests unittests.py
或指定一个模块:
nosetests mymodule.test
或者在您的测试模块中,您可以通过在程序中调用nose.main()或nose.run()来调用nose库并让它运行。