来自SWIG编译的C+的测试覆盖率+/Python代码 我有一个经典的SWIG设置,其中一组C++函数从Python调用。现在,在添加了一些测试(在Python中)之后,我想在C++源代码中获得测试覆盖率。经典的Python方法是 nosetests --with-coverage --cover-package=mypackage

来自SWIG编译的C+的测试覆盖率+/Python代码 我有一个经典的SWIG设置,其中一组C++函数从Python调用。现在,在添加了一些测试(在Python中)之后,我想在C++源代码中获得测试覆盖率。经典的Python方法是 nosetests --with-coverage --cover-package=mypackage,python,c++,swig,test-coverage,Python,C++,Swig,Test Coverage,但这只适用于本机Python模块。实际上,这将返回SWIG生成的mypackage.py文件的覆盖范围 因为需要对C++文件(或SWIG生成的共享库)进行覆盖,添加“代码> >覆盖< /代码>编译,链接标志当然是需要的。但我不知道该从那里走到哪里 有什么提示吗?面临着类似的问题,但使用的是C代码。它与SWIG部分无关,只需要编译覆盖代码测试并执行它的C++代码即可。为此,我使用了gcov和gcovr 使用gcov,要使这项工作正常,请使用以下标志编译代码(启用gcov检测) CFLAGS_VAL

但这只适用于本机Python模块。实际上,这将返回SWIG生成的
mypackage.py
文件的覆盖范围

因为需要对C++文件(或SWIG生成的共享库)进行覆盖,添加“代码> >覆盖< /代码>编译,链接标志当然是需要的。但我不知道该从那里走到哪里


有什么提示吗?

面临着类似的问题,但使用的是C代码。它与SWIG部分无关,只需要编译覆盖代码测试并执行它的C++代码即可。为此,我使用了
gcov
gcovr

使用
gcov
,要使这项工作正常,请使用以下标志编译代码(启用gcov检测)

CFLAGS_VAL+=-O0——覆盖率

然后,执行测试。测试运行后,应生成.gcno和.gcda文件

要创建覆盖率报告,请从根文件夹运行

gcovr-r--filter=“”--html--html详细信息-o coverage/coverage.html

GCOV文件


lcov也会产生同样的效果,请遵循本页中的示例

只是好奇而已。通常,您会有一个库,有时没有源代码。测试这个库并考虑库的测试覆盖率而不是包装器是否更有意义。接下来,使用<代码> NoestEss/Cord>可以返回包装器的覆盖范围。我可以在C++中构建库并编写测试以获得覆盖率。这将是一个更加乏味的过程,因为我没有Python中的一些关键工具。你也可以只为了测试语义和错误处理而进行覆盖测试。接下来,使用python对参考实现进行验证。