2010-07-23 115 views
25

我注意到,虽然我有很多的doctests在我们的Python代码,当我使用这里描述的方法跟踪测试:确保单元测试中的代码覆盖率?

traceit

我发现有一些是某些代码行从未执行过。我目前正在筛查traceit日志以确定永远不会运行的代码块,然后尝试提出不同的测试用例来锻炼这些特定的块。正如你可以想象的那样,这是非常耗时的,我想知道我们是否正在做这个错误的方式,以及你们是否有其他的建议或建议来处理这个问题,我相信,随着软件变得越来越普遍足够复杂。

回答

28

coverage.py是一个非常方便的工具。除其他外,它提供了branch coverage

+11

如果您提供了一个关于如何使用coverage.py的简短例子,这个答案会更有用。 – SimplyKnownAsG 2015-04-10 15:34:29

+6

@SimplyKnownAsG链接的页面有一个快速启动部分正面和中心,并包含示例用法。而不是复制和粘贴随着新版本发布而变化的文档,我发现最好只是链接。 – 2015-04-10 19:17:21

+1

如何使用'coverage.py':https://github.com/audreyr/how-to/blob/master/python/use_coverage_with_unittest.rst – dm295 2017-03-14 15:58:14

18

你有没有从管理层的授权中获得100%的代码覆盖率以及你的测试用例?如果没有,你是否认为触摸每一行代码是在代码中查找错误的最有效方法?假设你没有无限的时间和人力资源,那么你应该专注于合理地测试所有非平凡的代码,重点是开发人员知道编写或容易出错的部分。

尽管代码覆盖率很高,因为您肯定不能说一段代码被测试,直到它被触摸,我只是不等同触摸一段代码来调用它测试。我并不反对代码覆盖率,但它很容易落入使用代码覆盖率作为知道测试完成时的指标。我认为这是一个错误。

+7

这是一个很好的评论。在我的情况下,我们有科学家,而不是程序员,编写Python代码。因此,即使科学家非常聪明,代码的构建也很糟糕。这意味着最终的整合和测试是一场噩梦,我们必须努力工作才能在这个阶段发现严重问题。我试图让他们为每个负责的代码编写更好的测试用例,并且我打算使用代码覆盖作为验证他们集成的测试的一种方式。我可以理解,不是100%的代码需要被触及,但它会有所帮助。 – reckoner 2010-07-23 23:40:01

+0

拥有100%的覆盖率并不能保证有足够的测试,但没有足够的测试通常表示没有足够的测试。我们也不要忘记,coverage模块允许评论,如'#pragma:no cover'和'#pragma:no branch'。 – 2017-03-30 14:02:41

相关问题