我在类方法中有这个简单的代码(使用 std::map < std::string, std::string> 作为各种数据的容器):
try {
commonHeader->version = options.at("M3UA version").at(0);
} catch (const std::out_of_range& err) {
commonHeader->version = 1;
}
我正在使用 QtTest 来运行一些测试,一个特定的插槽具有
Q_ASSERT(isupPage->ui->cicLineEdit == isupResultPage->ui->cicLineEdit);
最后。
当此测试处于事件状态时,所有异常都将变得无法捕获,从而导致代码损坏和线程的 std::terminate() 。不过,将 Q_ASSERT 更改为 QVERIFY 似乎可以解决问题。
这是 Q_ASSERT 的预期行为,还是我应该更彻底地查看我的代码?
最佳答案
Q_ASSERT
是一个通用调试宏,在某些条件下确实可能终止您的程序(另请参阅qFatal
)。 QVERIFY
是一个在测试中使用的宏,因此您应该使用它。
关于c++ - Q_ASSERT 破坏了 C++ 异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32906498/