使用带有Boost测试的枚举类

Val*_*ris 5 c++ boost-test enum-class

我有一个我想在单元测试中使用的枚举类:

enum class MyEnumClass
{
    MyEntryA,
    MyEntryB
};
Run Code Online (Sandbox Code Playgroud)

我想用它如下:

MyEnumClass myEnumValue = MyEnumClass::MyEntryA;
BOOST_CHECK_EQUAL(myEnumValue, MyEnumClass::MyEntryB);
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个错误,显然因为boost测试试图输出值:

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
              ^
Run Code Online (Sandbox Code Playgroud)

添加丑陋的static_cast"解决"问题:

BOOST_CHECK_EQUAL(static_cast<int>(myEnumValue), static_cast<int>(MyEnumClass::MyEntryB));
Run Code Online (Sandbox Code Playgroud)

但是我想避免为每个枚举类做到这一点.我还想避免<<为每个枚举类定义流操作符.

是否有更简单的方法来使用带有boost测试的枚举类?

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

jbc*_*li2 6

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


Mal*_*ous 3

您可以使用 禁用相关类型的打印BOOST_TEST_DONT_PRINT_LOG_VALUE()。来自Boost文档

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

BOOST_TEST_DONT_PRINT_LOG_VALUE( pair_type )
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果您遇到不匹配,测试错误消息会告诉您,但它不会打印实际的不同值。