2015-06-16 34 views
4

我有一个枚举类,我想在我的单元测试使用方法:与加速测试使用枚举类

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)); 

但我想避免为每个枚举类做这件事。我也想避免为每个枚举类定义<<流操作符。

有没有更简单的方法来使用枚举类与升压测试?

或者其他单元测试框架有更好的方法来处理枚举类?

+0

可能重复的[我怎样才能输出一个枚举类的值在C + + 11](http://stackoverflow.com/questions/11421432/how-can-i-output-the-value-of-一个-枚举类型-C11) –

回答

2

您可以用BOOST_TEST_DONT_PRINT_LOG_VALUE()禁用相关类型的打印。从Boost docs

typedef std::pair<int,float> pair_type; 

BOOST_TEST_DONT_PRINT_LOG_VALUE(pair_type) 

在这种情况下,你应该得到的不匹配,测试错误信息会告诉你,但它,但是不能打印的实际不同的值。

2

问题是,Boost.Test必须在不相等的情况下打印值,并且在流上使用operator<<来完成此操作。

在这种情况下,还有比单纯上std::ostreamstatic_cast定义operator<<int,我看不出有什么更清洁的方式。

另一方面,像Catch这样的库没有这个要求,他们可能使用一些宏魔法来实现它。

1

另一种解决方案是使用BOOST_CHECK(myEnumValue == MyEnumClass::MyEntryB)而不是BOOST_CHECK_EQUAL。这对我有用,我假设对于简单的真/假检查,boost不需要打印出enum类。