如何正确地将Python单元测试组织成套件?
我有一些测试用例类,它们被整理在不同的文件夹里。
foo_tests
foo_tests1.py
foo_tests2.py
...
bar_tests
bar_tests1.py
...
这些测试用例看起来像这样:
foo_tests1.py:
import unittest
class FooTestsOne(unittest.TestCase):
def test_1():
assert(1=1)
def test_2():
#...
那么,像这样从测试用例类中组织测试套件的正确方法是什么呢?在unittest中有一些工具,比如TestLoaders和TestSuite对象,但它们是在哪里声明和使用的呢?我想要的是在一个单独的文件中定义一些测试套件,这样我就可以运行这些测试:
suite1.py
import unittest
import foo_test1
suite = unittest.TestSuite((unittest.makeSuite(foo_tests1.FooTestsOne),
unittest.makeSuite(foo_tests2.FooTeststwo),
))
if __name__ == "__main__":
result = unittest.TextTestRunner(verbosity=2).run(suite())
sys.exit(not result.wasSuccessful())
但这并不是将测试聚合到套件中的正确方法。当我导入测试用例类(比如“import foo_test1”)时,它里面的测试会立即被运行(在导入的时候)。那么,怎样才能正确地将测试聚合到套件中呢?我需要对哪些测试放入哪个套件有更细致的控制……我看过TestSuite的文档,但似乎没有提供很多例子……
1 个回答
3
测试在导入时是不应该运行的。也许你在 foo_test1.py 文件的底部有 unittest.main()
这行代码?
你的脚本应该可以正常工作,只是
result = unittest.TextTestRunner(verbosity=2).run(suite())
应该改成
result = unittest.TextTestRunner(verbosity=2).run(suite)