假设我有以下类和参数化测试:
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执行此操作。这个解决方案不是最优的原因是,如果我有多个参数化测试,我将不得不为每个测试重复循环。
答案 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
选项。