我们的C代码库使用assert来检查是否满足前置条件/后置条件.
#include#include void Aborting_Function(int n); int main(){ Aborting_Function(1); //good Aborting_Function(0); //calls std::abort() //Is it possible to recover somehow? //And continue on... } void Aborting_Function(int n){ assert(n > 0); //impl... }
在单元测试中,我想验证函数是否正确遵循它们的合同
(在它们应该的时候中止).
是否有可能从std :: abort恢复?
我意识到单元测试检查断言应该检查完全相同的东西似乎有些重复,但这会有所帮助,因为我们可以自动检查不应该工作的特定用例.
简短的回答,"不".
您可能需要考虑使用Google测试框架,而不是颠覆abort().
这有DEATH_TEST(文档:https://github.com/google/googletest/blob/master/googletest/docs/V1_7_AdvancedGuide.md)
基本上它的作用是fork一个子进程并检查该语句是否导致它退出(如果它中止它将会这样做).