如何正确地将Python单元测试组织成套件?

3 投票
1 回答
1665 浏览
提问于 2025-04-15 16:08

我有一些测试用例类,它们被整理在不同的文件夹里。

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)

撰写回答