【发布时间】:2014-12-26 11:43:38
【问题描述】:
我们最近开始使用 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);
}
}
在这种情况下,无法知道测试失败的原因。
我试图“复制” 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: 在测试实现中的某处被覆盖,出现了失败的情况。
有什么(简单而干净的)方法可以解决这个问题吗?
UPDATE 似乎 test_tools.ipp 中的 check_impl() 实现没有使用 check_descr 相等性检查的参数。
2020 年更新 BOOST_TEST_CONTEXT() 和 BOOST_TEST_INFO() ,如果您可以使用合理的最新 boost 版本,现在应该是首选方法,因为框架提供的操作当然要干净得多。
有没有一种优雅的方式来覆盖/提供我自己的?
【问题讨论】:
标签: c++ unit-testing testing boost boost-test