用另一个断言来保护某些断言的最佳方法是什么?

时间:2017-06-28 17:13:20

标签: googletest

我们说我有这个代码,这只是我测试用例的一部分:

ASSERT_EQ( 1, p.polygon().num_vertices() );
EXPECT_EQ( blah, p.polygon().at( 0 ) );

我真的不想要:

  • 将每个小位移动到单独的函数的开销。
  • 在第一个断言中重复谓词。
  • 如果第一个断言失败,则中止整个测试用例。

...但当然,如果第一次失败,我最好不要尝试第二次断言。最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

如果C ++ 11可用,则可以使用lambda来定义一组断言,而不需要单独函数的全部开销:

[=]() {
  ASSERT_EQ( 1, p.polygon().num_vertices() );
  EXPECT_EQ( blah, p.polygon().at( 0 ) );
}();

这可以在测试用例中显示为内联(与完整函数不同),不需要命名,并且看起来或多或少像范围块(好)。显然,这样一个块中的致命断言只会退出块,所以如果分组断言包含需要中止整个测试用例的断言,那就不理想了。