gpt4 book ai didi

c++ - 如何将 boost::exception 与 boost::unit_test 结合起来,并有一个很好的消息

转载 作者:太空狗 更新时间:2023-10-29 21:50:47 26 4
gpt4 key购买 nike

当我有以下自动测试用例时:

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。

最佳答案

我找到了如何做到这一点:

像这样使用全局夹具:

#include "boost/test/unit_test_monitor.hpp"

class Fixture
{
public:
Fixture();
~Fixture();
};

void translateBoostException(const boost::exception &e)
{
BOOST_FAIL(boost::diagnostic_information(e));
}

Fixture::Fixture()
{
boost::unit_test::unit_test_monitor.register_exception_translator<boost::exception>(&translateBoostException);
}

Fixture::~Fixture()
{
}

BOOST_GLOBAL_FIXTURE( Fixture )

然后是下面的测试:

class MyException: virtual public boost::exception, 
virtual public std::exception
{
};

BOOST_AUTO_TEST_CASE(ExceptionTest)
{
BOOST_THROW_EXCEPTION(MyException());
}

给予:

Running 1 test case...
/home/..../SetupTestFixture.cpp(18): fatal error in "ConfigFile":
/home/..../Test.cpp(16): Throw in function void ConfigFile::test_method()
Dynamic exception type: boost::exception_detail::clone_impl<MyException>
std::exception::what: std::exception


*** 1 failure detected in test suite "ExceptionTest"

关于c++ - 如何将 boost::exception 与 boost::unit_test 结合起来,并有一个很好的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5392517/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com