2010-07-15 59 views
3

當我測試我的C++類如Boost.Test和我的自定義異常拋出(他們是我的類的實例),這是我在日誌中看到的消息:如何使用Boost.Test捕獲我的自定義異常?

unknown location:0: fatal error in "testMethod": unknown type 

這是非常不信息我不知道如何教Boost.Test將我的異常轉換爲字符串並正確顯示它。我的Exception班有operator string(),但它沒有幫助。有任何想法嗎?謝謝!

回答

2

我相信,如果你的自定義異常類從std::exception繼承它會工作。

+0

其實我繼承'std :: exception' **和**'std :: string' :)謝謝 – yegor256 2010-07-15 16:44:15

+1

不知道爲什麼你需要同時做這兩件事。前者應該足夠。 或者,您可以註冊自定義異常轉換程序(例如,如果您無法更改異常定義)。您可以閱讀Boost.Test文檔中的界面。 – 2011-03-17 00:05:28

1

您可能需要std名稱空間中定義操作< <:

namespace std { 
    inline std::ostream& operator<<(std::ostream& os, const Exception& ex) { 
     os << ex.string(); 
     return os; 
    } 
} 

這應該允許如Boost.Test以顯示異常的內容。

我發現這個必要的,這樣的對象可以與BOOST_CHECK_EQUAL()進行測試,等

+2

不,這不是必需的。 – 2011-03-17 00:03:38

1

您可以測試如果一個函數拋出使用BOOST_CHECK_THROW或類似

看到Boost.Test Docs除了指定:

class my_exception{}; 

BOOST_AUTO_TEST_CASE(test) 
{ 
    int i = 0; 
    BOOST_CHECK_THROW(i++, my_exception); 
} 
0

我剛從std::string繼承它,一切正常。

+1

如果它是一個自定義異常,爲什麼不從std :: exception繼承並實現what()而不是從std :: string繼承並實現string()?然後你就可以做一個catch(const std :: exception&ex){std :: cerr << ex.what(); } – rturrado 2011-03-17 10:23:53