虽然ASSERT_ *宏导致测试用例终止,但EXPECT_ *宏仍继续进行评估。 我想知道哪个是决定是否使用其中一个的标准。在GoogleTest中使用ASSERT和EXPECT
30
A
回答
33
使用ASSERT
当测试通过时很关键。 (例如,如果它没有通过,那么程序的其余部分将不起作用。)当它是一个可以承受失败的测试(并且允许您运行程序时)使用EXPECT
。
规则的拇指是:使用EXPECT
,除非你需要某些东西来完成整个测试,在这种情况下,你应该使用ASSERT
,因为继续是没有意义的。
这在primer内回荡:
一般
EXPECT_*
是优选的,因为它们允许在测试中报告多于一个的故障。但是,如果在有问题的断言失败时无法继续,则应该使用ASSERT_*
。
14
使用EXPECT_
当你
- 希望在您的测试报告不止一个故障
使用ASSERT_
时
- 它没有任何意义,继续当断言失败
由于ASSERT_
如果失败会立即中止您的功能,可能的清理代码会被跳过。 首选EXPECT_
作为您的默认值。
4
检查以下链接:Effective C++ Testing Using GoogleTest (幻灯片23)。对于使用EXPECT vs ASSERT有很好的指导意见/建议。
0
除了以前的答案...
ASSERT_
不会终止测试用例的执行。它从任何使用的函数返回。除了失败测试用例,它的计算结果为return;
,这意味着它不能用于返回除void
以外的函数。除非你对编译器警告没有问题,那就是。
EXPECT_
失败的测试用例但不return;
,所以它可以在任何返回类型的函数内部使用。
相关问题
- 1. 在expect中同时使用expect()和interact()
- 2. 如何在python中使用assert和==?
- 3. 在消息中使用assert()
- 4. 使用#!/ usr/bin/expect和bash
- 5. 在eclipse中使用googletest:怎么样?
- 6. 使用Assert Java
- 7. googletest和VS2010:无法使用EXPECT_EQ
- 8. 使用Expect
- 9. 在猪中使用ASSERT时出错
- 10. 何时在PHP中使用native assert
- 11. 在“assert”中使用switch语句(C++)
- 12. 在munit mule中使用assert-payload选项
- 13. 如何在c DLL中使用assert
- 14. 在正常代码中使用assert
- 15. 在Python中使用assert的例子?
- 16. 如何在Python中正确使用(assert)?
- 17. 在C++中使用“assert”指针
- 18. Prolog - ASSERT和RETRACT
- 19. 在'expect'中使用条件语句
- 20. 在bash脚本中使用expect期望
- 21. 在Bash脚本中使用Expect函数
- 22. Jasmine:在循环中使用expect期望
- 23. 如何在lambda Expect中使用Rhino.Mocks.RhinoMocksExtensions.VoidType?
- 24. 在Python中使用expect的用户名和密码
- 25. 使用expect脚本
- 26. 使用Net :: SSH :: Expect
- 27. 捕习俗在GoogleTest使用__debugbreak
- 28. 为什么我们在php中使用assert()和assert_options()?
- 29. 如何使用expect和git clone?
- 30. Mixing Expect和BASH
标准示例:在检查容器的内容之前,先检查容器的大小,因为检查对可能不存在的项目的期望是没有意义的(此外,如果尝试获取第n个元素,测试很可能会崩溃空容器)。 – chalup 2010-04-02 07:00:21
这与你是否希望_program_运行无关,而是关于你是否希望_test suite_继续运行。预期失败应该表示您正在测试的代码有缺陷。一个ASSERT失败应该意味着测试套件本身是有缺陷的,或者说你正在测试的代码是如此混乱以至于没有必要继续尝试测试它。 – 2017-12-06 16:45:43