我有一个C ++项目,并且我想使用bazel coverage
来获取其代码覆盖率信息。
但是,运行命令后,我发现coverage.dat
中的文件bazel-testlogs
不包含任何内容。
那么我在寻找正确的地方吗?还是Bazel有问题?
我正在使用Bazel 1.0.0。
完整示例
WORKSPACE
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
git_repository(
name = "gtest",
remote = "https://github.com/google/googletest",
commit = "3306848f697568aacf4bcca330f6bdd5ce671899",
)
lib/a.cc
int f(int x) {
if (x == 0)
return x + 1;
else
return 1 + x;
}
lib/BUILD
cc_library(
name = "a",
srcs = ["a.cc"],
visibility = ["//test:__pkg__"],
)
test/my_test.cc
#include "gtest/gtest.h"
TEST(FactorialTest, Negative) {
EXPECT_EQ(1, 1);
}
test/BUILD
cc_test(
name = "my_test",
srcs = ["my_test.cc"],
copts = ["-Iexternal/gtest"],
deps = ["@gtest//:gtest_main", "//lib:a"],
)
运行bazel coverage //test:my_test
后,我看到在bazel-testlogs/test/my_test/coverage.dat
处生成了一个文件,但该文件为空(0字节)。
答案 0 :(得分:1)
当前Bazel覆盖范围<>仅支持Linux。
我使用bazel创建了一个项目,用于导出C ++代码覆盖率(https://github.com/hohaidang/STM32-from-scratch/tree/master/004_SPI_driver_CPP) 打开unit_test文件夹以获取有关BUILD文件的更多详细信息
Bazel版本3.5.0
$ bazel coverage unit_test:ut_gpio --combined_report=lcov
$ genhtml bazel-out/_coverage/_coverage_report.dat -o test_coverage
注意:您应该将所有测试文件和源文件放在同一文件夹中。如果文件夹不同,它将生成无效的.dat文件。我仍然不知道如何解决。
答案 1 :(得分:0)
以这种方式运行bazel coverage
:
bazel coverage -s \
--instrument_test_targets \
--experimental_cc_coverage \
--combined_report=lcov \
--coverage_report_generator=@bazel_tools//tools/test/CoverageOutputGenerator/java/com/google/devtools/coverageoutputgenerator:Main \
//...