coverage.py是否正确显示python绑定的测试覆盖率?

时间:2014-04-16 23:21:02

标签: python testing binding code-coverage swig

我对功能测试的测试覆盖感兴趣。这些测试是测试模块代码,它是通过SWIG编译的。

我试过了:

coverage run --source=/path/to/module/__init__py allMyTests.py

coverage run --source=/path/to/module/__init__py partOfTests.py

在每种情况下,即使测试数量和模块使用的代码数量不同,它也会保存相同的信息。 它似乎没有像我预期的那样起作用,但也许我做错了。

我可以找出python绑定代码的测试覆盖率吗?

它不一定是使用coverage.py工具。

1 个答案:

答案 0 :(得分:2)

覆盖率用于确定正在测试的代码的比例。因此,如果两个测试文件测试API的相同部分,则代码量和测试数量完全不同的两个测试文件仍可能导致相同的覆盖率数据。

更新:

听起来你想在python扩展DLL中测试C / C ++代码的覆盖范围。由于扩展名是C / C ++,因此coverage模块无法进入。该模块可以告诉您的是,扩展中的每个Python函数是否都从测试中的某个位置调用。

话虽这么说,任何可以处理动态链接的DLL 按需的C / C ++代码覆盖工具都能够满足您的需求。最终,您的脚本由python.exe运行,最终会加载您的DLL。如果在Visual C ++ 2010中写入DLL,并且您可以找到适用于该编译器的C / C ++代码覆盖工具,那么您可以告诉Visual Studio附加到python进程,并提供感兴趣的DLL的覆盖率统计信息(我从来没有这样做,但我认为有一种方法可以告诉覆盖工具exe的哪些部分 - 在这种情况下你的DLL - 是有意义的)。

因此,我将为您的C ++编译器寻找合适的C / C ++代码覆盖工具。就像在Windows上这样的SO Code coverage in Visual Studio 2010 for native C++ exe/dll表示有这样的工具。