2014-02-14 110 views
-3

我正在嘗試在客戶端服務器上執行增強單元測試。增強單元測試例外

如何測試是否拋出異常,例如boost::asio::error::Connection_refused如果服務器不在線?

我已經查看了文檔,我仍然感到困惑(boost,C++ newbie)。

僅供參考我已經運行一個BOOST_AUTO_TEST_CASE其中包含一個構造函數,設置IP地址和端口#並連接到服務器。當我運行BOOST_AUTO_TEST時,如果服務器處於脫機狀態並且沒有檢測到錯誤,我會得到預期的異常,但是我想我的問題BOOST_CHECK_THROWBOOST_WARN_THROW如果我能夠在沒有它們的情況下進行測試,將會如何進入Play。

+1

它完全*不清楚你想達到什麼。據我瞭解你的問題,你已經設法編寫一個測試用例,試圖連接到一個離線服務器時,成功地得到預期的異常。那麼你的問題是什麼? –

+0

謝謝你的迴應Arne。我已經運行我的測試,而不使用任何像BOOST_CHECK_THROW或BOOST_WARN_THROW,我想知道這樣的事情是否有必要?如果我可以運行測試,那麼它們有什麼用處,如果不使用BOOST_CHECK_Throw,e.t.c就可以獲得沒有任何失敗的異常。 – user2911641

+0

哦,我可以*猜*現在你的代碼可能看起來像什麼(你嘗試/「手動」捕獲,並在你發現正確的異常時成功,對吧?),但如果你願意提供它,我們可以告訴你內建boost宏的優點是什麼。我假設你沒有足夠的代表來編輯你自己的問題,所以給我們一個pastebin鏈接到[SSCCE](http://sscce.org),我們會爲你編輯它 –

回答

0

因爲我只能猜測你當前的代碼是什麼樣子,我就提供你的測試用例如何能看起來像一個BOOST_CHECK_THROW的exaple:

BOOST_AUTO_TEST_CASE(testMissingServer) { 
    MyClient client; 
    BOOST_CHECK_THROW(
    client.connect(someNonexistentServerIP, somePort), 
    boost::asio::error::Connection_refused 
); 
} 

這樣做手工將是這個樣子:

BOOST_AUTO_TEST_CASE(testMissingServer) { 
    MyClient client; 
    try { 
    client.connect(someNonexistentServerIP, somePort); 
    BOOST_ERROR("client.connect(someNonexistentServerIP, somePort) did not throw anything. Expected a boost::asio::error::Connection_refused"); 
    } catch(boost::asio::error::Connection_refused const&) { 
    //ok, this is the expected case 
    } catch(...) { 
    BOOST_ERROR("client.connect(someNonexistentServerIP, somePort) did throw an unkown exception, but expected a boost::asio::error::Connection_refused"); 
    } 

}

你看這是更繁瑣的,因爲你必須檢查錯誤exceptinos和所有單獨概莫能外。 BOOST_CHECK_THROW不僅提供了更簡潔和更易讀的測試用例,而且如果您所期望的異常不會拋出,它也會生成有意義的失敗消息。

+0

感謝Arne解釋 – user2911641