2015-10-02 39 views
2

我在類方法這個簡單的代碼處理(使用std ::地圖<的std :: string,的std :: string>作爲用於各種數據容器):Q_ASSERT場所C++異常

try { 
    commonHeader->version = options.at("M3UA version").at(0); 
    } catch (const std::out_of_range& err) { 
    commonHeader->version = 1; 
    } 

和I」 m使用QtTest來運行一些測試,一個特定插槽具有

Q_ASSERT(isupPage->ui->cicLineEdit == isupResultPage->ui->cicLineEdit); 

最後。

當此測試處於活動狀態時,所有異常都變爲不可捕捉,導致線程的代碼和std :: terminate()被破壞。但是,將Q_ASSERT更改爲QVERIFY似乎可以解決問題。

這是Q_ASSERT的預期行爲,還是應該更仔細地查看我的代碼?

回答

3

Q_ASSERT是一個通用調試宏,在某些情況下的確可能會終止您的程序(另請參閱qFatal)。 QVERIFY是一個在測試中使用的宏,所以這是你應該使用的宏。