如何在Python单元测试中运行单个测试套件中的多个类.....
答案 0 :(得分:33)
如果要从特定的测试类列表运行所有测试,而不是模块中所有测试类的所有测试,则可以使用TestLoader
的{{1 }}方法为每个类获取loadTestsFromTestCase
个测试,然后从包含所有可以与TestSuite
一起使用的套件的列表中创建单个组合TestSuite
:
run
答案 1 :(得分:12)
我对你在这里要求的内容有点不确定,但是如果你想知道如何在同一个套件中测试多个类,通常只需在同一个python文件中创建多个测试类并一起运行:< / p>
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
更好的例子可以在the official documention中找到。
另一方面,如果你想运行多个测试文件,详见"How to organize python test in a way that I can run all tests in a single command?",那么另一个答案可能更好。
答案 2 :(得分:3)
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 )
答案 3 :(得分:0)
我发现nose是一个很好的工具。它发现目录结构中的所有单元测试并执行它们。
答案 4 :(得分:0)
通常你会按照以下方式进行(每个套件只添加一个类):
# Add tests.
alltests = unittest.TestSuite()
alltests.addTest(unittest.makeSuite(Test1))
alltests.addTest(unittest.makeSuite(Test2))
如果您希望每个套件有多个类,您可以使用以下方式添加这些测试:
for name in testnames:
suite.addTest(tc_class(name, cargs=args))
以下是为每个单独的套件运行所有类的示例,您可以定义自己的make_suite
方法:
# Credits: http://codereview.stackexchange.com/a/88662/15346
def make_suite(tc_class):
testloader = unittest.TestLoader()
testnames = testloader.getTestCaseNames(tc_class)
suite = unittest.TestSuite()
for name in testnames:
suite.addTest(tc_class(name, cargs=args))
return suite
# Add all tests.
alltests = unittest.TestSuite()
for name, obj in inspect.getmembers(sys.modules[__name__]):
if inspect.isclass(obj) and name.startswith("FooTest"):
alltests.addTest(make_suite(obj))
result = unittest.TextTestRunner(verbosity=2).run(alltests)
如果上面没有套件,你可以将上面的例子转换成可以接受多个类的方法。