【发布时间】:2020-01-17 20:15:44
【问题描述】:
我想对一些偶尔使用assert() 的代码进行单元测试。具体来说,我想确保某些命令确实触发了断言。但是 - 我实际上并不希望程序被中止。 (如果发生这种情况,我既需要确保从程序外部终止程序,又需要为每个这样的测试用例设置不同的程序。)
我也知道assert() 是一个宏,所以如果我正在测试的代码是仅标头代码,理论上我可以使用我的单元测试库(doctest)编写某种替换宏来触发故障)。
我的问题:
- 也许 doctest 已经有一些工具可以进行这种测试?
- 如果没有,是否有一些惯用的方式来实现断言触发测试?也许与我可以适应的其他测试框架/库一起使用?
注意:我注意到 here on SO 谷歌测试有某种相关的设施,ASSERT_DEATH,但我不清楚它是否能做我想做的事情。
【问题讨论】:
-
您链接到的 ASSERT_DEATH 文档似乎说它完全适合这个目的
-
@JMAA:我不清楚它是如何做的,以及进程是否真的中止,谷歌测试框架可能会做一些神奇的事情来处理它(例如父进程)。但是,如果您能详细说明,我将不胜感激。
-
GoogleTest 死亡测试are indeed executed as a subprocess。我不确定
assert()到底做了什么,但大概它以标准退出代码退出(您可以在死亡测试中测试)并返回错误消息(您也可以测试)。
标签: c++ unit-testing assert idioms doctest