如何在Python单元测试中运行Single Test Suite中的多个类?

时间:2011-03-19 07:40:44

标签: python unit-testing

如何在Python单元测试中运行单个测试套件中的多个类.....

5 个答案:

答案 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)

如果上面没有套件,你可以将上面的例子转换成可以接受多个类的方法。