与加速测试使用枚举类
问题描述:
我有一个枚举类,我想在我的单元测试使用方法:与加速测试使用枚举类
enum class MyEnumClass
{
MyEntryA,
MyEntryB
};
我想如下使用它:
MyEnumClass myEnumValue = MyEnumClass::MyEntryA;
BOOST_CHECK_EQUAL(myEnumValue, MyEnumClass::MyEntryB);
但我得到这个错误,因为显然升压试验正试图输出值:
include/boost/test/test_tools.hpp:326:14: error: cannot bind 'std::ostream {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'
ostr << t; // by default print the value
^
添加丑陋static_cast
“解决了”的问题:
BOOST_CHECK_EQUAL(static_cast<int>(myEnumValue), static_cast<int>(MyEnumClass::MyEntryB));
但我想避免为每个枚举类做这件事。我也想避免为每个枚举类定义<<
流操作符。
有没有更简单的方法来使用枚举类与升压测试?
或者其他单元测试框架有更好的方法来处理枚举类?
答
您可以用BOOST_TEST_DONT_PRINT_LOG_VALUE()
禁用相关类型的打印。从Boost docs:
typedef std::pair<int,float> pair_type;
BOOST_TEST_DONT_PRINT_LOG_VALUE(pair_type)
在这种情况下,你应该得到的不匹配,测试错误信息会告诉你,但它,但是不能打印的实际不同的值。
答
问题是,Boost.Test必须在不相等的情况下打印值,并且在流上使用operator<<
来完成此操作。
在这种情况下,还有比单纯上std::ostream
或static_cast
定义operator<<
到int
,我看不出有什么更清洁的方式。
另一方面,像Catch这样的库没有这个要求,他们可能使用一些宏魔法来实现它。
答
另一种解决方案是使用BOOST_CHECK(myEnumValue == MyEnumClass::MyEntryB)
而不是BOOST_CHECK_EQUAL。这对我有用,我假设对于简单的真/假检查,boost不需要打印出enum类。
可能重复的[我怎样才能输出一个枚举类的值在C + + 11](http://stackoverflow.com/questions/11421432/how-can-i-output-the-value-of-一个-枚举类型-C11) –