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

时间:2017-01-30 16:47:58

标签: c++ googletest

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

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行输出,一个用于该范围内的每个参数。

现在说我想把我的范围从10改为1000万。如果我运行它,我会得到1000万行输出(这将太多了)。有没有办法可以将此参数化测试的所有输出分组为一个,并简单地报告第一个错误?

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

1 个答案:

答案 0 :(得分:2)

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

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以打印单行摘要。

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