Как получить покрытие кода C ++ с помощью Bazel? - PullRequest
0 голосов
/ 14 октября 2019

У меня есть проект 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 байт).

1 Ответ

0 голосов
/ 30 октября 2019

Выполнить 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 \
    //...
...