2010-04-02 43 views

回答

33

使用ASSERT当测试通过时很关键。 (例如,如果它没有通过,那么程序的其余部分将不起作用。)当它是一个可以承受失败的测试(并且允许您运行程序时)使用EXPECT

规则的拇指是:使用EXPECT,除非你需要某些东西来完成整个测试,在这种情况下,你应该使用ASSERT,因为继续是没有意义的。


这在primer内回荡:

一般EXPECT_*是优选的,因为它们允许在测试中报告多于一个的故障。但是,如果在有问题的断言失败时无法继续,则应该使用ASSERT_*

+7

标准示例:在检查容器的内容之前,先检查容器的大小,因为检查对可能不存在的项目的期望是没有意义的(此外,如果尝试获取第n个元素,测试很可能会崩溃空容器)。 – chalup 2010-04-02 07:00:21

+1

这与你是否希望_program_运行无关,而是关于你是否希望_test suite_继续运行。预期失败应该表示您正在测试的代码有缺陷。一个ASSERT失败应该意味着测试套件本身是有缺陷的,或者说你正在测试的代码是如此混乱以至于没有必要继续尝试测试它。 – 2017-12-06 16:45:43

14

使用EXPECT_当你

  • 希望在您的测试报告不止一个故障

使用ASSERT_

  • 它没有任何意义,继续当断言失败

由于ASSERT_如果失败会立即中止您的功能,可能的清理代码会被跳过。 首选EXPECT_作为您的默认值。

0

除了以前的答案...

ASSERT_不会终止测试用例的执行。它从任何使用的函数返回。除了失败测试用例,它的计算结果为return;,这意味着它不能用于返回除void以外的函数。除非你对编译器警告没有问题,那就是。

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