Bootstrapping tests and using Python test discovery
一个问题,我继续让它"引导"我的测试。
我的问题正是这个人的问题。
最重要的解决方案是创建一个"boostrap"脚本。我假定随后必须枚举所有要运行的测试,或者使用
在2.7中,我们使用了名为"discovery"的python命令
1 | python -m unittest discover |
效果更好。因为:1)不需要鼻子2)不需要测试清单
但它似乎没有办法"引导"
我需要使用另一个测试运行程序吗?允许引导和发现?
我需要做PY测试吗?网址:http://pytest.org/
我需要自举的原因是这个家伙有问题。基本上,如果我直接运行测试,我的import语句就不能正常工作。我想从我的项目顶部执行我的测试套件,就像程序正常运行时一样。
毕竟,import语句总是相对于它们的物理位置。(顺便说一句,我认为这是Python的障碍)
定义:什么是引导?引导意味着在整个项目中运行任何测试之前,我想做一些设置。这有点像我在整个项目级别要求一个"测试设置"。
更新这是关于同一件事的另一个帖子。使用这个2.7命令,我们可以避开鼻子。但是如何添加引导呢?
我得到了它!
使用我编写并称之为"runtests.py"并放置在项目根目录中的这一个脚本,我能够"引导"运行一些初始化代码并使用发现。呜呜!
在我的例子中,"bootstrap"代码是两行代码,它们表示:
1 2 | import sys sys.path.insert(0, 'lib.zip') |
谢谢!
1 2 3 4 5 6 7 8 9 | #!/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 2 3 4 5 6 7 8 9 10 | 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文件以引导测试相当容易。首先,每个带有测试的文件(
1 2 3 4 5 | def suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(Test_Length)) suite.addTest(unittest.makeSuite(Test_Sum)) return suite |
在测试代码的末尾。然后,在run_tests.py文件中,将这些集合到一个额外的test_套件中,并运行:
1 2 3 4 5 6 7 8 9 10 11 12 | 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 |
然后从命令行运行所有这些测试,只需运行
1 | python run_tests.py |