C++ C++;在代码中保留断言的测试套件
我正在尝试为我的项目设置测试,我禁用了异常,并定义了调用std::abort的断言。gtest和Catch只能在调用std::abort的一个测试中失败,因为它会杀死整个测试套件。C++ C++;在代码中保留断言的测试套件,c++,unit-testing,testing,visual-c++,automated-tests,C++,Unit Testing,Testing,Visual C++,Automated Tests,我正在尝试为我的项目设置测试,我禁用了异常,并定义了调用std::abort的断言。gtest和Catch只能在调用std::abort的一个测试中失败,因为它会杀死整个测试套件。 我的项目编译成测试项目/可执行文件引用的DLL。除了: 启用异常并让我的断言抛出 创建自定义编译目标并执行类似于1的操作 重新构造代码,使其不依赖断言而失败 我还有其他选择吗?出于设计/速度方面的考虑,我不希望启用异常。这里有两个问题: 1. Can I do testing without exceptions?
我的项目编译成测试项目/可执行文件引用的DLL。除了:
我还有其他选择吗?出于设计/速度方面的考虑,我不希望启用异常。这里有两个问题:
1. Can I do testing without exceptions?
是的,你可以。如果std::abort
没有提供足够的信息,您可以尝试使用std::quick_exit
2. Can I keep the test suite going after a failure?
这真的与前者无关。保持测试套件在出现错误后继续运行是一项技术挑战,因为程序可能会因为可怕的不可恢复的原因(如除以零或堆栈可能已被破坏)而导致测试失败
保持测试套件运行的唯一方法是在单独的进程中运行测试
在我的一个项目中,我在
main
中删除了开关标志,该标志使程序在测试模式下运行,然后指向特定的测试。然后,bash脚本会在~100个这样的测试中进行迭代。这里有两个问题:
1. Can I do testing without exceptions?
是的,你可以。如果std::abort
没有提供足够的信息,您可以尝试使用std::quick_exit
2. Can I keep the test suite going after a failure?
这真的与前者无关。保持测试套件在出现错误后继续运行是一项技术挑战,因为程序可能会因为可怕的不可恢复的原因(如除以零或堆栈可能已被破坏)而导致测试失败
保持测试套件运行的唯一方法是在单独的进程中运行测试
在我的一个项目中,我在
main
中删除了开关标志,该标志使程序在测试模式下运行,然后指向特定的测试。然后,bash脚本会在大约100个这样的测试上进行迭代。googletest支持这一点。查找死亡测试。应用程序中止的死亡测试。我构建代码的方式是,一旦出现不可恢复的错误,它就会中止,这几乎可以在任何时候发生。这可能不是一个很好的设计。googletest支持这一点。查找死亡测试。应用程序中止的死亡测试。我构建代码的方式是,一旦出现不可恢复的错误,它就会中止,这几乎可以在任何时候发生。这可能不是一个很好的设计。