首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单独计算Python单元测试中的子测试

单独计算Python单元测试中的子测试
EN

Stack Overflow用户
提问于 2017-07-10 16:37:16
回答 2查看 2.9K关注 0票数 8

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

代码语言:javascript
复制
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()

运行测试时,输出将为

代码语言:javascript
复制
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 tests in ...),以获得完整的情况。

The nose test generator feature会单独输出每个测试,但如果可能的话,我希望与标准库保持兼容。

EN

回答 2

Stack Overflow用户

发布于 2017-07-10 17:24:35

你可以继承unittest.TestResult的子类

代码语言:javascript
复制
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函数:

代码语言:javascript
复制
def run(self, test_result=None):
    return super(NumbersTest, self).run(NumbersTestResult())

很抱歉,我现在不能在完全工作的环境中测试它,但这应该可以做到这一点。

票数 2
EN

Stack Overflow用户

发布于 2019-07-17 17:55:06

在使用Python3.5.2的时候,我的answer不能开箱即用,但稍微做了一些调整,它就可以做我想要的事情了。

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

代码语言:javascript
复制
if __name__ == '__main__': 
    unittest.main(testRunner=unittest.TextTestRunner(resultclass=NumbersTestResult))

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

代码语言:javascript
复制
class NumbersTestResult(unittest.TextTestResult):
    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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45007346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档