用另一个断言保护某些断言的最佳方法是什么?
What's the best way to guard some assertions with another assertion?
假设我有这段代码,它只是我的测试用例的一部分:
ASSERT_EQ( 1, p.polygon().num_vertices() );
EXPECT_EQ( blah, p.polygon().at( 0 ) );
我真的不想:
- 将这些小位中的每一个移动到单独的函数的开销。
- 重复第一个断言中的谓词。
- 如果第一个断言失败,则中止整个测试用例。
...但是,当然,如果第一个断言失败,我最好不要尝试第二个断言。执行此操作的最佳方法是什么?
如果 C++11 可用,lambda 可用于确定一组断言的范围,而无需单独函数的全部开销:
[=]() {
ASSERT_EQ( 1, p.polygon().num_vertices() );
EXPECT_EQ( blah, p.polygon().at( 0 ) );
}();
这可以内嵌在测试用例中(与完整函数不同),不需要命名,并且看起来或多或少像一个作用域块(很好)。显然,这样一个块中的致命断言只会退出该块,因此如果分组断言中包含需要中止整个测试用例的断言,那是不理想的。
假设我有这段代码,它只是我的测试用例的一部分:
ASSERT_EQ( 1, p.polygon().num_vertices() );
EXPECT_EQ( blah, p.polygon().at( 0 ) );
我真的不想:
- 将这些小位中的每一个移动到单独的函数的开销。
- 重复第一个断言中的谓词。
- 如果第一个断言失败,则中止整个测试用例。
...但是,当然,如果第一个断言失败,我最好不要尝试第二个断言。执行此操作的最佳方法是什么?
如果 C++11 可用,lambda 可用于确定一组断言的范围,而无需单独函数的全部开销:
[=]() {
ASSERT_EQ( 1, p.polygon().num_vertices() );
EXPECT_EQ( blah, p.polygon().at( 0 ) );
}();
这可以内嵌在测试用例中(与完整函数不同),不需要命名,并且看起来或多或少像一个作用域块(很好)。显然,这样一个块中的致命断言只会退出该块,因此如果分组断言中包含需要中止整个测试用例的断言,那是不理想的。