假设我有以下类和参数化测试:
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行输出,范围中的每个参数一个。
现在假设我想将范围从 1000 万更改为 1000 万。如果我运行它,我将获得 1000 万行输出(这太多了)。有没有办法将此参数化测试的所有输出分组为一个,并简单地报告第一个错误?
我知道我可以重写我的测试用例来循环遍历值并断言每个值,但我想知道是否有办法从 googletest 中做到这一点。此解决方案不是最佳的原因是,如果我有多个参数化测试,我将不得不为每个测试重复循环。
可以通过删除默认打印机并添加自己的打印机来更改测试输出的打印方式。阅读谷歌测试高级指南的这一部分。
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
选项。