googletest - 如何在输出结果时将我的参数化测试合并为一个?

googletest - How can I combine my parameterized tests into one when outputting results?

假设我有以下 class 和参数化测试:

class SimpleTest : public ::testing::Test, public ::testing::WithParamInterface<int> {};

INSTANTIATE_TEST_CASE_P(SimpleTests, SimpleTest, ::testing::Range(1, 10));

TEST_P(SimpleTest, TestGreaterThanZero) {
    int i = GetParam();
    ASSERT_GT(i, 0);
}

当我 运行 googletest 时,我得到 10 行输出,每行对应 运行ge 中的每个参数。

现在说我想把我的 运行ge 从 10 万变成 1000 万。如果我 运行 那个,我将得到 1000 万行输出(这太多了)。有没有一种方法可以将此参数化测试的所有输出组合成一个,并仅报告第一个错误?

我知道我可以重写我的测试用例以循环遍历值并对每个值进行断言,但我想知道是否有一种方法可以从 googletest 执行此操作。这个解决方案不是最优的原因是如果我有多个参数化测试,我将不得不为每个重复循环。

您可以通过删除默认打印机并添加您自己的打印机来更改测试输出的打印方式。阅读 google-test 高级指南的 part

int main(int argc, char** argv) {
  ::testing::InitGoogleTest(&argc, argv);
  // Gets hold of the event listener list.
  ::testing::TestEventListeners& listeners =
      ::testing::UnitTest::GetInstance()->listeners();
  // delete default printer
  delete listeners.Release(listeners.default_result_printer());
  // add your own
  listeners.Append(new MinimalistPrinter);
  return RUN_ALL_TESTS();  return RUN_ALL_TESTS();
}

如何定义这样的MinimalistPrinter?它是通过子类化 ::testing::EmptyTestEventListener 来完成的。只需覆盖 OnTestPartResult 以收集失败信息,并覆盖 OnTestEnd 以打印 one-line 摘要。


或者您可以尝试 --gtest_break_on_failure 选项。