我们最近开始使用Boost Test框架,并且到目前为止很喜欢它。然而,有些测试需要在现有辅助函数中添加自定义消息,这将非常有用。
例如,我可以在mytest和mytest2中获取输出,但是我发现没有方法可以在mytest3中获取输出:
#define BOOST_TEST_MODULE mytests
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_SUITE(myunit)
BOOST_AUTO_TEST_CASE(mytest)
{
// This give a nice output [2+2 != 5]
BOOST_CHECK_EQUAL(2+2, 5);
}
BOOST_AUTO_TEST_CASE(mytest2)
{
// This give only a custom output
BOOST_CHECK_MESSAGE(2+2 == 5, "comparison error");
}
BOOST_AUTO_TEST_CASE(mytest3)
{
// Ideally, it should output [2+2 != 5] comparison error
BOOST_CHECK_EQUAL_WITH_ADDITIONAL_MESSAGE(2+2, 5, "comparison error");
}
BOOST_AUTO_TEST_SUITE_END()
我想要这样做的原因是,如果我想要有像这样的测试用例:
BOOST_AUTO_TEST_CASE(mytest4)
{
for(int i = 0; i < 10; ++i)
{
BOOST_CHECK_EQUAL_WITH_ADDITIONAL_MESSAGE(i%3, 0, i);
}
}
在这种情况下,无法知道哪个 i 导致测试失败。
我尝试了以下方法来“复制” BOOST_CHECK_EQUAL 宏,希望 boost 会像原始宏一样附加到传递的消息上。#define BOOST_CHECK_EQUAL2( L, R ) \
BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::equal_impl_frwd(), "hello world", CHECK, CHECK_EQUAL, (L)(R) )
然而,在测试实现中,“hello world”被某个失败的条件覆盖了。
有没有(简单、干净)的方法来解决这个问题?
更新:在test_tools.ipp中,check_impl()实现并没有利用check_descr参数进行相等性检查。
2020年更新: BOOST_TEST_CONTEXT()和BOOST_TEST_INFO() ,如果您使用的是一个比较新的boost版本,这应该是首选的方法,因为框架提供的操作显然更加干净。
有没有一种优雅的方法来覆盖/提供我的方法?
BOOST_TEST_CONTEXT()
:https://www.boost.org/doc/libs/1_65_0/libs/test/doc/html/boost_test/test_output/test_tools_support_for_logging/contexts.html - John Zwinck