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测试的枚举类?
或者其他单元测试框架是否有更好的方法来处理枚举类?
另一个解决方案是使用BOOST_CHECK(myEnumValue == MyEnumClass::MyEntryB), 而不是 BOOST_CHECK_EQUAL。这对我有用,我假设对于简单的真/假检查,boost 不需要打印出枚举类。
您可以使用 禁用相关类型的打印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)
在这种情况下,如果您遇到不匹配,测试错误消息会告诉您,但它不会打印实际的不同值。
| 归档时间: |
|
| 查看次数: |
1230 次 |
| 最近记录: |