【问题标题】:Test coverage from SWIG-compiled C++/Python code来自 SWIG 编译的 C++/Python 代码的测试覆盖率
【发布时间】:2016-12-29 10:38:09
【问题描述】:

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

nosetests --with-coverage --cover-package=mypackage

但这仅适用于原生 Python 模块。事实上,这将返回 SWIG 生成的 mypackage.py 文件的覆盖率。

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

有什么提示吗?

【问题讨论】:

  • 只是好奇。通常,您会有一个库,有时没有源代码。测试这个库并考虑库而不是包装器的测试覆盖率不是更有意义吗?接下来,使用nosetests 然后可以用于返回包装器的覆盖范围。
  • 我也许可以构建库并用 C++ 编写测试以获取覆盖范围。不过,这会更加乏味,因为我没有 Python 中的某些可用的关键工具。
  • 您也可以进行覆盖测试,其唯一目的是测试语义和错误处理。接下来,使用 python 来验证参考实现。

标签: python c++ swig test-coverage


【解决方案1】:

面临类似的问题,但使用 C 代码。它与 SWIG 部分无关,只需要使用覆盖工具编译您的 C++ 代码并执行它。我为此使用了gcovgcovr

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

CFLAGS_VAL += -O0 --coverage

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

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

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

GCOV 文档,here

同样可以用 lcov 创建,在这个 wiki 页面中做例子

【讨论】:

    猜你喜欢
    • 2019-08-12
    • 2015-11-22
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 2016-01-04
    相关资源
    最近更新 更多