我创建了以下异常类:
namespace json {
/**
* @brief Base class for all json-related exceptions
*/
class Exception : public std::exception { };
/**
* @brief Indicates an internal exception of the json parser
*/
class InternalException : public Exception {
public:
/**
* @brief Constructs a new InternalException
*
* @param msg The message to return on what()
*/
InternalException( const std::string& msg );
~InternalException() throw ();
/**
* @brief Returns a more detailed error message
*
* @return The error message
*/
virtual const char* what() const throw();
private:
std::string _msg;
};
}
实现(一个或多个):
InternalException::InternalException( const std::string& msg ) : _msg( msg ) { }
InternalException::~InternalException() throw () { };
const char* InternalException::what() const throw() {
return this->_msg.c_str();
}
我抛出这样的异常:
throw json::InternalException( "Cannot serialize uninitialized nodes." );
我想在Boost :: Test单元测试中测试异常抛出行为:
// [...]
BOOST_CHECK_THROW( json::write( obj ), json::InternalException ); //will cause a json::InternalException
但是,当异常发生时,测试将退出,就好像没有尝试... catch。
如果我尝试使用json::write()
甚至try{ json.write(obj); }catch(const json::InternalException& ex){}
明确地隐藏try{json.write(obj);}catch(...){}
来电,我会得到相同的行为。提出异常,但无论如何我都无法抓住它。
我得到的输出如下:
terminate called after throwing an instance of 'json::InternalException'
what(): Cannot serialize uninitialized nodes.
我在这里做错了什么?
答案 0 :(得分:1)
我找到了。我试图把SSCCE扔给你们的时候想通了。我使用throw说明符声明了json::write()
,但没有包含json::InternalException
。
现在将throw说明符调整为正确的异常让我真正抓住了它。谢谢你的所有提示。