在GoogleTest中使用ASSERT和EXPECT

问题描述 投票:0回答:4

虽然 ASSERT_* 宏导致测试用例终止,但 EXPECT_* 宏继续其评估。 我想知道决定使用其中之一的标准是什么。

c++ unit-testing googletest
4个回答
89
投票

当条件

必须
成立时使用ASSERT - 如果不成立,测试将立即停止。当测试的其余部分在不满足此条件的情况下不具有语义意义时使用此选项。

当条件

应该
成立时使用EXPECT,但在不成立的情况下,我们仍然可以通过继续测试获得价值。 (不过,测试最终还是会失败。)

经验法则是:默认使用

EXPECT
,除非您需要在其余测试中保留一些东西,在这种情况下,您应该针对该特定条件使用
ASSERT


这在底漆中得到了呼应:

通常首选

EXPECT_*
,因为它们允许在测试中报告多个失败。但是,如果当相关断言失败时继续没有意义,您应该使用
ASSERT_*


27
投票

当您

时使用
EXPECT_

  • 想要报告测试中多次失败的情况

时使用
ASSERT_

  • 当断言失败时继续没有意义

由于

ASSERT_
会在函数失败时立即中止函数,因此会跳过可能的清理代码。 首选
EXPECT_
作为默认值。


10
投票

除了之前的答案...

ASSERT_
不会终止测试用例的执行。它从使用的任何函数中返回。除了测试用例失败之外,它的计算结果为
return;
,这意味着它不能在返回
void
之外的函数中使用。除非您对编译器警告感到满意。

EXPECT_
使测试用例失败,但
return;
没有失败,因此它可以在任何返回类型的函数内部使用。


0
投票

断言_*:

  • 失败时,不再检查剩余条件。

期望_*:

  • 失败时,仍检查剩余条件。
© www.soinside.com 2019 - 2024. All rights reserved.