如何在Python的单元测试中在单个测试套件中运行多个类?
我怎么在Python中使用单元测试,在一个测试套件里运行多个类呢?
5 个回答
7
unittest.TestLoader.loadTestsFromModule() 这个方法可以找到并加载指定模块中的所有类。所以你只需要这样做:
import unittest
import sys
class T1(unittest.TestCase):
def test_A(self):
pass
def test_B(self):
pass
class T2(unittest.TestCase):
def test_A(self):
pass
def test_B(self):
pass
if __name__ == "__main__":
suite = unittest.TestLoader().loadTestsFromModule( sys.modules[__name__] )
unittest.TextTestRunner(verbosity=3).run( suite )
运行一个名为 test_core.py
的文件,可以这样:
python .\test_core.py
test_A (__main__.T1.test_A) ... ok
test_B (__main__.T1.test_B) ... ok
test_A (__main__.T2.test_A) ... ok
test_B (__main__.T2.test_B) ... ok
26
我不太确定你在问什么,但如果你想知道怎么在同一个测试套件里测试多个类,通常你只需要在同一个Python文件里创建多个测试类,然后一起运行它们:
import unittest
class TestSomeClass(unittest.TestCase):
def testStuff(self):
# your testcode here
pass
class TestSomeOtherClass(unittest.TestCase):
def testOtherStuff(self):
# testcode of second class here
pass
if __name__ == '__main__':
unittest.main()
然后可以用比如说这样的方式来运行:
python mytestsuite.py
更好的例子可以在 官方文档 找到。
另一方面,如果你想运行多个测试文件,详细信息可以在 “如何组织Python测试,以便我可以用一个命令运行所有测试?” 中找到,那么其他的回答可能更合适。
50
如果你想只运行某个特定测试类中的所有测试,而不是模块中所有测试类的所有测试,你可以使用 TestLoader
的 loadTestsFromTestCase
方法来获取每个类的测试集合 TestSuite
。然后,你可以把这些测试集合放在一个列表里,创建一个合并后的 TestSuite
,这样就可以用 run
来运行它们了。
import unittest
# Some tests
class TestClassA(unittest.TestCase):
def testOne(self):
# test code
pass
class TestClassB(unittest.TestCase):
def testOne(self):
# test code
pass
class TestClassC(unittest.TestCase):
def testOne(self):
# test code
pass
def run_some_tests():
# Run only the tests in the specified classes
test_classes_to_run = [TestClassA, TestClassC]
loader = unittest.TestLoader()
suites_list = []
for test_class in test_classes_to_run:
suite = loader.loadTestsFromTestCase(test_class)
suites_list.append(suite)
big_suite = unittest.TestSuite(suites_list)
runner = unittest.TextTestRunner()
results = runner.run(big_suite)
# ...
if __name__ == '__main__':
run_some_tests()