9

I have used gflags in my test to define custom flags. How can I pass such a flag to my test while running the test via bazel test command?

For example: I can run a test multiple times using:

bazel test //xyz:my_test --runs_per_test 10 

In the same command I would like to pass a flag defined in my_test say --use_xxx, how do I do so?

Curious
  • 2,783
  • 3
  • 29
  • 45
  • I think the word flags might be overloaded. Do you mean arguments to the main method of your test runner? – Ittai Jun 16 '18 at 15:07
  • it's interesting here because with `bazel run` you can leverage the fact that everything to the right of a lone `--` would get interpreted as arguments to pass down to the process while for build and run commands that blocked off section functions as [target patterns](https://docs.bazel.build/versions/main/command-line-reference.html) as in `bazel [] [] -- []` – jxramos Jan 10 '22 at 18:31

2 Answers2

15

Use the --test_arg flag.

bazel test //xyz:my_test --runs_per_test=10 --test_arg=--use_xxx --test_arg=--some_number=42

From the docs:

--test_arg arg: Passes command-line options/flags/arguments to each test process. This option can be used multiple times to pass several arguments, e.g. --test_arg=--logtostderr --test_arg=--v=3.

You can also specify arguments for the test as part of the BUILD definition:

cc_test(
    name = "my_test",
    srcs = [".."],
    deps = [".."],
    args = ["--use_xxx", "--some_number=42"],
)
Jin
  • 12,748
  • 3
  • 36
  • 41
-1

You can add a main into your test. It will look like this.

TEST(A, FUNC) {
  // Your test here.
}

int main(int argc, char** argv) {
  gflags::ParseCommandLineFlags(&argc, &argv, /*remove_flags=*/true);
  testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
} 

It works fine for me.