SWIG 编译的 C++/Python 代码的测试覆盖率

Nic*_*mer 5 c++ python swig test-coverage

我有一个经典的 SWIG 设置,其中从 Python 调用一堆 C++ 函数。现在,在添加一些测试(在 Python 中)之后,我想获得 C++ 源代码的测试覆盖率。经典的Python方法是

nosetests --with-coverage --cover-package=mypackage
Run Code Online (Sandbox Code Playgroud)

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

由于我需要覆盖 C++ 文件(/SWIG 生成的共享库),因此--coverage肯定需要添加编译和链接器标志。但不知道从那里去哪里。

有什么提示吗?

ale*_*pov 0

面临类似的问题,但使用 C 代码。它与 SWIG 部分无关,只需要使用覆盖率工具编译 C++ 代码并执行它。我用了gcovandgcovr来实现这个目的。

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

CFLAGS_VAL += -O0 --覆盖范围

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

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

gcovr -r 。--filter="" --html --html-details -o 覆盖率/coverage.html

GCOV 文档,在这里

同样可以使用 lcov 创建,请按照此wiki页面中的示例进行操作