2010-07-15 8 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

+1

Не знаете, зачем вам обоим. Этого должно быть достаточно, чтобы сделать прежнее. В качестве альтернативы вы можете зарегистрировать собственный переводчик исключительных ситуаций (например, если вы не можете изменить определение исключения). Вы можете прочитать об интерфейсе в документах Boost.Test. –

1

Вам может потребоваться определить оператор < < в пространстве имен станд:

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

Это должно позволить Boost.Test отображать содержимое вашего исключения.

Я нашел, что это необходимо для того, что объекты могут быть проверены с BOOST_CHECK_EQUAL() и т.д.

+2

№ Это не требуется. –

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

Смежные вопросы