【发布时间】:2013-02-28 10:36:30
【问题描述】:
当我使用测试方法时
BOOST_CHECK_NO_THROW( method_to_test() );
并且抛出了一个异常,它显示那个抛出了一个异常,但从来没有像这样的异常的消息:
test.cpp(14): error in "test": incorrect exception my_exception is caught
是否也可以打印异常消息,即my_exception.what()返回的字符串? my_exception 派生自 std::exception 并重载 what()。
【问题讨论】:
-
写到哪里? Boost Tests 用于检查代码是否损坏,而不是用于调试代码。它坏了吗?它是布尔值:true 或 false。
-
(1) 写入标准输出(控制台或 xml 文件,取决于测试运行器的命令行参数) (2) 如果抛出异常,是的,它被破坏了。但是,如果可以看到异常消息(what() 的输出),则可以更快地找出错误的来源。
-
是的,但为什么呢?测试确实表明代码被破坏了:它在不应该抛出的地方抛出了异常。下一步是采取并修复代码或测试,而不是创建用垃圾填充控制台的详细 XML 文件。
-
嗯,好的。我认为更快地找到错误会很好。我的测试使用数据库(实际上,没有模拟对象),并且测试可能由于不同的原因而失败(不仅是由于错误的类或测试代码)。我相信由于“高度可定制”的提升测试框架可能会有一个解决方案,但我可能最终没有使用这个不错的
BOOST_AUTO_*()。但是谢谢 Tiib! -
为什么,@ÖöTiib?你宁愿让你的医生告诉你“我发现你有问题”。或“我发现你的膝盖有问题。”?如果语句没有包装在
BOOST_<LEVEL>_NO_THROW中,单元测试框架会打印异常消息。使用断言所提供的信息不应该比没有它们时获得的信息少。
标签: c++ unit-testing boost-test