【发布时间】:2011-03-22 14:04:29
【问题描述】:
当我有以下自动测试用例时:
class MyException: virtual public boost::exception,
virtual public std::exception
{
};
BOOST_AUTO_TEST_CASE(ExceptionTest)
{
BOOST_THROW_EXCEPTION(MyException());
}
运行测试给出:
ExceptionTest.cpp(14): fatal error in "void ExceptionTest::test_method()":
std::exception: std::exception
如何更改此设置,以便显示异常名称 (MyException) 和 boost::diagnostic_information() 而不是 std::exception?我尝试将自己的异常翻译器注册到执行监视器,但似乎 std::exception 在尝试任何注册的翻译器之前已被处理。
我在 Linux 上使用 boost 1.44 和 gcc 4.4.5。
【问题讨论】:
-
我虽然这在 Boost.Test 主干中得到了解决。有可能我没有将更改移到版本中 - 最近没有太多时间在 Boost.test 上工作。顺便说一句,您是否为您的异常或 std::exception 注册了翻译器?另外,为什么需要从 std::exception 进行虚拟继承?
-
@Gennadiy Rozental:我尝试为我的异常和 boost::exception 注册它,但它不起作用。当然也有可能是我注册的时候弄错了。 (我在几个地方尝试了
boost::unit_test::unit_test_monitor.register_exception_translator<MyException>(&handler);,比如全局夹具和测试自我。) -
@Gennadiy Rozental:来自
std::exception的虚拟继承是因为没有它BOOST_THROW_EXCEPTION将无法编译,根据boost::exception的文档,这是一件“好事”:@987654321 @ -
@Gennadiy Rozental:我尝试再次注册我自己的翻译器,现在不知何故它可以工作了。我想我之前犯了一个错误。请参阅下面的答案。
标签: c++ unit-testing exception boost