让我们从一个最小的工作示例开始:
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% 的代码覆盖率,因为编译器会生成未执行的异常代码,如另一个 stackoverflow 问题中所述。
问题是通过禁用异常-fno-exceptions
对我来说不是一个选项。我正在为使用异常编写单元测试的代码,因此禁用所有异常不是一种选择。
为了生成我正在使用的报告gcovr
,如果使用 clang++,还 llvm-cov gcov
需要对其进行转换。但我不受这些工具的约束,所以如果你有其他工具不显示这种行为,请推荐它们!
基本上我需要一种方法来编译/编写此代码的单元测试,并在启用异常的情况下获得 100% 的分支/条件覆盖。有办法吗?