如何对assert()失败进行单元测试?

时间:2020-01-17 20:15:44

标签: c++ unit-testing assert idiomatic doctest

我想对一些偶尔使用assert()的代码进行单元测试。具体来说,我想确保某些命令确实触发了断言。但是-我实际上不希望程序中止。 (如果发生这种情况,我既需要确保程序从程序外部中止,又需要为每个这样的测试用例使用不同的程序。)

我也知道assert()是一个宏,因此如果我要测试的代码仅是标头,则理论上我可以使用单元测试库编写某种替换宏来触发失败({ {3}})。

我的问题:

  • 也许doctest已经具备进行这种测试的功能?
  • 如果没有,是否有一些惯用的方式来执行断言测试?也许我可以适应其他测试框架/库?

注意:我已经注意到doctest,Google测试具有某种相关的功能,here on SO,但是我不清楚它是否可以完成我想做的事情。

1 个答案:

答案 0 :(得分:2)

通常,您可以做的是生成一个子进程,在其中执行操作,并在父进程中测试该子进程是否成功终止,并可能检查该子进程生成的任何输出。我认为这就是Google的测试。

在C ++中没有标准的方法来产生子流程。该标准不承认其他过程的存在。多任务操作系统将为此提供API。在POSIX标准中,可以使用fork函数创建子进程。