當我測試我的C++類如Boost.Test和我的自定義異常拋出(他們是我的類的實例),這是我在日誌中看到的消息:如何使用Boost.Test捕獲我的自定義異常?
unknown location:0: fatal error in "testMethod": unknown type
這是非常不信息我不知道如何教Boost.Test將我的異常轉換爲字符串並正確顯示它。我的Exception
班有operator string()
,但它沒有幫助。有任何想法嗎?謝謝!
當我測試我的C++類如Boost.Test和我的自定義異常拋出(他們是我的類的實例),這是我在日誌中看到的消息:如何使用Boost.Test捕獲我的自定義異常?
unknown location:0: fatal error in "testMethod": unknown type
這是非常不信息我不知道如何教Boost.Test將我的異常轉換爲字符串並正確顯示它。我的Exception
班有operator string()
,但它沒有幫助。有任何想法嗎?謝謝!
我相信,如果你的自定義異常類從std::exception
繼承它會工作。
您可能需要std名稱空間中定義操作< <:
namespace std {
inline std::ostream& operator<<(std::ostream& os, const Exception& ex) {
os << ex.string();
return os;
}
}
這應該允許如Boost.Test以顯示異常的內容。
我發現這個必要的,這樣的對象可以與BOOST_CHECK_EQUAL()進行測試,等
不,這不是必需的。 – 2011-03-17 00:03:38
您可以測試如果一個函數拋出使用BOOST_CHECK_THROW或類似
看到Boost.Test Docs除了指定:
class my_exception{};
BOOST_AUTO_TEST_CASE(test)
{
int i = 0;
BOOST_CHECK_THROW(i++, my_exception);
}
我剛從std::string
繼承它,一切正常。
如果它是一個自定義異常,爲什麼不從std :: exception繼承並實現what()而不是從std :: string繼承並實現string()?然後你就可以做一個catch(const std :: exception&ex){std :: cerr << ex.what(); } – rturrado 2011-03-17 10:23:53
其實我繼承'std :: exception' **和**'std :: string' :)謝謝 – yegor256 2010-07-15 16:44:15
不知道爲什麼你需要同時做這兩件事。前者應該足夠。 或者,您可以註冊自定義異常轉換程序(例如,如果您無法更改異常定義)。您可以閱讀Boost.Test文檔中的界面。 – 2011-03-17 00:05:28