How To Determine Which Unit Test Covered a Function or Method
从 Python 的angular来看,如何确定覆盖函数或方法的单元测试,或者通常是由测试运行程序在套件中的测试命中的任何代码行?考虑到覆盖工具知道被击中的特定代码,这个信息似乎是合理的,但是我找不到任何方法来获取这些信息(我使用 py.test 作为我的测试运行器和 coverage 和pytest-cov 个模块)。
我发现的一种方法是将 pdb.set_trace 调用放入代码中,但如果我能找到一种不需要修改被测代码的更优雅的方法,那将非常有帮助。
- 你的测试组织得如何?你能运行子集来查看哪个调用了特定的行吗?
- 我一直在使用nose来测试代码覆盖率。 nosetests –with-coverage –cover-tests
- 它们组织得很好,但是收集了数千个测试,这是我偶尔遇到的问题。
- 我专门使用 py.test。 nose 是否具有开箱即用的这种能力?似乎 –cover-tests 标志只在报告中包含测试本身,这与我在这里寻找的不同。
- 据我所知,这样做的唯一方法是运行更窄的测试子集来确定哪些正在调用该线路 – 通常,覆盖工具设置为告诉您是否调用了线路,而不是从哪里来。
- 我看到那里也有 testmon.org,但不确定这是否真的是这个问题的答案
Smother 是一个围绕coverage.py 的package实用程序,它分别测量测试套件中每个测试的代码覆盖率。其主要特点包括:
- 使用coverage.py 进行快速可靠的覆盖跟踪。
- 能够查找哪些测试访问了应用程序代码的任意部分。
- 能够将版本控制差异转换为受影响测试的子集以重新运行。
支持py.test和nose.
- 谢谢!我会检查这些。
- 我发现安装 Smother 改变了路径加载行为或 py.test;这不应该影响任何进行正常 python 打包的人,但它确实影响了一些奇怪的 vendor直接套套测试用例。被警告
Coverage.py 还没有提供这个功能,但是有一张我们正在讨论想法的公开票:https://github.com/nedbat/coveragepy/issues/170
要阅读此问题的旧历史,请查看旧票(在 BitBucket 跟踪器中)
- 谢谢你的链接。我会密切关注进展!
- Coverage.py 现在提供此功能:nedbatchelder.com/blog/201810/who_tests_what_is_here.html
我不知道这段代码在当前生态系统中是否仍然有效(特别是当前的覆盖版本和nose/nose 2插件API),但是figleaf包中的figleaf-sections插件提供了这个功能.
http://darcs.idyll.org/~t/projects/figleaf/doc/
如果我记得,这是一个很好的概念证明,我肯定有用,但我认为有一些粗糙的边缘,如果有人接受这个想法并真正让它顺利运行,我会喜欢它!
来源:https://www.codenong.com/33424070/