虽然 ASSERT_* 宏导致测试用例终止,但 EXPECT_* 宏继续其评估。 我想知道决定使用其中之一的标准是什么。
当条件
必须成立时使用
ASSERT
- 如果不成立,测试将立即停止。当测试的其余部分在不满足此条件的情况下不具有语义意义时使用此选项。
当条件
应该成立时使用
EXPECT
,但在不成立的情况下,我们仍然可以通过继续测试获得价值。 (不过,测试最终还是会失败。)
经验法则是:默认使用
EXPECT
,除非您需要在其余测试中保留一些东西,在这种情况下,您应该针对该特定条件使用 ASSERT
。
这在底漆中得到了呼应:
通常首选
,因为它们允许在测试中报告多个失败。但是,如果当相关断言失败时继续没有意义,您应该使用EXPECT_*
。ASSERT_*
当您
时使用
EXPECT_
当
时使用
ASSERT_
由于
ASSERT_
会在函数失败时立即中止函数,因此会跳过可能的清理代码。
首选 EXPECT_
作为默认值。
除了之前的答案...
ASSERT_
不会终止测试用例的执行。它从使用的任何函数中返回。除了测试用例失败之外,它的计算结果为 return;
,这意味着它不能在返回 void
之外的函数中使用。除非您对编译器警告感到满意。
EXPECT_
使测试用例失败,但 return;
没有失败,因此它可以在任何返回类型的函数内部使用。
断言_*:
期望_*: