如何使用 Bazel 获得 C++ 代码覆盖率?

Eri*_*lib 5 c++ code-coverage bazel

我有一个 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",
)
Run Code Online (Sandbox Code Playgroud)

lib/a.cc

int f(int x) {
    if (x == 0)
        return x + 1;
    else
        return 1 + x;
}
Run Code Online (Sandbox Code Playgroud)

lib/BUILD

cc_library(
    name = "a",
    srcs = ["a.cc"],
    visibility = ["//test:__pkg__"],
)
Run Code Online (Sandbox Code Playgroud)

test/my_test.cc

#include "gtest/gtest.h"

TEST(FactorialTest, Negative) {
  EXPECT_EQ(1, 1);
}
Run Code Online (Sandbox Code Playgroud)

test/BUILD

cc_test(
    name = "my_test",
    srcs = ["my_test.cc"],
    copts = ["-Iexternal/gtest"],
    deps = ["@gtest//:gtest_main", "//lib:a"],
)
Run Code Online (Sandbox Code Playgroud)

运行后bazel coverage //test:my_test,我在bazel-testlogs/test/my_test/coverage.dat生成时看到一个文件,但它是空的(0 字节)。

Ver*_*ahn 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 \
    //...
Run Code Online (Sandbox Code Playgroud)

  • 如果我只是使用目标“//test:my_test”运行命令,我会得到“错误:输出‘_coverage/_coverage_report.dat’未创建错误:并非所有输出均已创建或有效” (4认同)