【发布时间】:2018-03-04 04:18:07
【问题描述】:
让我们从一个最小的工作示例开始:
main.cpp:
#include <iostream>
#include <string>
int main() {
std::cout << "hello " + std::to_string(42);
return 0;
}
我使用以下标志编译此代码:
[g++/clang++] -std=c++11 -g -Og --coverage -Wall -o main main.cpp
叮当 4.0.1
gcc 4.8.5。
我只得到了 50% 的代码覆盖率,因为编译器会生成不执行的异常代码,正如 in another stackoverflow question 所解释的那样。
问题是通过-fno-exceptions 禁用异常对我来说不是一个选项。我正在为使用异常编写单元测试的代码,因此禁用所有异常不是一种选择。
为了生成报告,我使用gcovr,如果是clang++,另外llvm-cov gcov 来转换它。但我不受这些工具的约束,所以如果您有其他工具不显示这种行为,请推荐它们!
基本上,我需要一种方法来编译/编写此代码的单元测试,并在启用异常的情况下获得 100% 的分支/条件覆盖。有什么办法吗?
【问题讨论】:
标签: c++ gcc code-coverage gcov gcovr