C++ Catch Framework 处理 C 的断言?
C++ Catch Framework Deal with C's assert?
我使用 Phil Squared 的 Catch 测试框架结合一些使用断言的第三方代码进行了单元测试。
在开发过程中,经常会悄悄发生一些错误断言并导致程序中止的情况。在这些情况下,Catch 不会报告任何日志和其他诊断信息。
有没有办法"redirect"这个程序中止,让Catch来处理?
你不能捕获断言,但你可以重新定义它。原来的assert只是终止程序,并没有抛出异常,所以你无法捕捉到。但是 assert 是一个宏,你可以取消定义原始宏并定义你自己的。在 C++ 程序中,以这种方式重新定义断言是一种常见的技巧,它会抛出异常。然后你就可以在测试中抓住它了。
我使用 Phil Squared 的 Catch 测试框架结合一些使用断言的第三方代码进行了单元测试。
在开发过程中,经常会悄悄发生一些错误断言并导致程序中止的情况。在这些情况下,Catch 不会报告任何日志和其他诊断信息。
有没有办法"redirect"这个程序中止,让Catch来处理?
你不能捕获断言,但你可以重新定义它。原来的assert只是终止程序,并没有抛出异常,所以你无法捕捉到。但是 assert 是一个宏,你可以取消定义原始宏并定义你自己的。在 C++ 程序中,以这种方式重新定义断言是一种常见的技巧,它会抛出异常。然后你就可以在测试中抓住它了。