问题我继续让它“引导”我的测试。
我遇到的问题恰好是what this guy has。
顶级解决方案谈论创建“boostrap”脚本。我假设我必须枚举所有要运行的测试,或者使用__init__.py
关键字在__all__
文件中使用测试清单。但是,我注意到most recent Python documentation on unittest不再讨论__all__
了。
在2.7中,我们有一个名为“discovery”的python命令
python -m unittest discover
这更好用。因为: 1)没有鼻子需要 2)不需要测试清单
但它似乎没有办法“引导”
我是否需要使用其他测试跑步者?一个允许自举和发现?
我需要py.test吗?
http://pytest.org/
我需要自举的原因是this guy has的问题。基本上,如果我直接运行测试,我的import语句就不能正常工作。我想从项目的顶部执行我的测试套件,就像应用程序正常运行时一样。
毕竟,import语句总是相对于它们的物理位置。 (顺便说一句,我认为这是Python的障碍)
定义:什么是Bootstrapping? Bootstrapping意味着我想在整个项目中运行任何测试之前进行一些设置。这有点像我要求在整个项目级别进行“测试设置”。
更新 Here is another posting about the same thing。使用这个2.7命令,我们可以避免使用Nose。但是如何添加自举?
答案 0 :(得分:4)
我明白了!
使用我编写的这个脚本并将其命名为“runtests.py”并放在我的项目根目录中,我能够“引导”,即运行一些初始化代码并使用发现。活泉!
就我而言,“bootstrap”代码是两行:
import sys
sys.path.insert(0, 'lib.zip')
谢谢!
#!/usr/bin/python
import unittest
import sys
sys.path.insert(0, 'lib.zip')
if __name__ == "__main__":
all_tests = unittest.TestLoader().discover('.')
unittest.TextTestRunner().run(all_tests)
答案 1 :(得分:0)
这就是我的工作,我认为它的效果非常好。对于类似于此的文件/目录结构:
main_code.py
run_tests.py
/Modules
__init__.py
some_module1.py
some_module2.py
/Tests
__init__.py
test_module1.py
test_module2.py
组织run_tests.py文件以引导测试相当容易。首先,每个带有test(test_module1.py
等)的文件都应该实现一个生成测试套件的函数。类似的东西:
def suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(Test_Length))
suite.addTest(unittest.makeSuite(Test_Sum))
return suite
在测试代码的末尾。然后,在run_tests.py文件中,将这些聚合到另一个test_suite中,然后运行:
import unittest
import Tests.test_module1 as test_module1
import Tests.test_module2 as test_module2
module1_test_suite = test_module1.suite()
module2_test_suite = test_module2.suite()
aggregate_suite = unittest.TestSuite()
aggregate_suite.addTest(module1_test_suite)
aggregate_suite.addTest(module2_test_suite)
unittest.TextTestsRunner(verbosity = 2).run(aggregate_suite
然后从命令行运行所有这些测试,只需运行
python run_tests.py