分别计算Python单元测试中的子测试

2024-06-01 00:18:37 发布

您现在位置:Python中文网/ 问答频道 /正文

从3.4版开始,Python supports a simple subtest syntax when writing unittests。一个简单的例子如下:

import unittest

class NumbersTest(unittest.TestCase):

    def test_successful(self):
        """A test with subtests that will all succeed."""
        for i in range(0, 6):
            with self.subTest(i=i):
                self.assertEqual(i, i)

if __name__ == '__main__':
    unittest.main()

运行测试时,输出将是

^{pr2}$

然而,在我的实际用例中,子测试将依赖于更复杂的iterable,并检查每个子测试都非常不同的内容。因此,我宁愿将每个子测试计数并作为一个单独的测试用例列在输出中(在本例中是Ran 6 tests in ...),以获得完整的结果。在

在Python中的普通unittest模块中,这是否可能?The nose test generator feature将分别输出每个测试,但如果可能,我希望与标准库保持兼容。在


Tags: intestimportselfmainwithunittestsimple
2条回答

在使用Python3.5.2时,themiurge的answer对我来说不是开箱即用的,但稍加调整就可以实现我想要的功能。在

我必须特别让测试运行人员使用这个新类,如下所示:

if __name__ == '__main__': 
    unittest.main(testRunner=unittest.TextTestRunner(resultclass=NumbersTestResult))

然而,这并不像默认情况下那样将测试失败的详细信息打印到控制台。为了恢复这种行为,我不得不将继承自的类NumbersTestResult更改为unittest.TextTestResult。在

^{pr2}$

您可以子类unittest.TestResult

class NumbersTestResult(unittest.TestResult):
    def addSubTest(self, test, subtest, outcome):
        # handle failures calling base class
        super(NumbersTestResult, self).addSubTest(test, subtest, outcome)
        # add to total number of tests run
        self.testsRun += 1

然后在NumbersTest中重写run函数:

^{pr2}$

很抱歉,我现在无法在完全工作的环境中测试此功能,但这应该能解决问题。在

相关问题 更多 >