计算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()

运行测试时,输出将是

python3 test_foo.py --verbose
test_successful (__main__.NumbersTest)
A test with subtests that will all succeed. ... ok

----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

但是,在我的实际用例中,子测试将依赖于更复杂的迭代,并检查每个子测试的非常不同的东西.因此,我宁愿让每个子测试计数并在输出中列出一个单独的测试用例(在本例中为Ran 6测试)以获得完整的图像.

这在Python中使用plain unittest模块是否可行? The nose test generator feature将单独输出每个测试,但如果可能的话,我希望与标准库保持兼容.

解决方法

你可以继承unittest.TestResult:

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

然后在NumbersTest中覆盖run函数

def run(self,test_result=None):
    return super(NumbersTest,self).run(NumbersTestResult())

对不起,我现在无法在完全正常工作的环境中对此进行测试,但这应该可以解决问题.

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...