BOOST_DATA_TEST_CASE 是否总是需要样本的可印刷性?
Does BOOST_DATA_TEST_CASE always require printability of the samples?
我正在尝试获取一些数据驱动的测试用例 运行 BOOST_DATA_TEST_CASE
并了解目前的基础知识。
但是,我注意到用作样本输入的类型必须是可打印的:
这会起作用:
std::vector<std::string> printable_cases = { "case1", "case2" };
BOOST_DATA_TEST_CASE(test_mvex, utdata::make(printable_cases), sample) {
// Do some tests with sample
}
这行不通:
struct Thingmajig {
// I really don't care for printability!
explicit Thingmajig(int a, int b) { c = a + b; }
int c;
};
std::vector<Thingmajig> nonprintable_cases = { Thingmajig(1, 2), Thingmajig(4, 7) };
BOOST_DATA_TEST_CASE(test_mvex2, utdata::make(nonprintable_cases), sample) {
// Do some tests with sample
}
它会出错:
Error C2679 binary '<<': no operator found which takes a right-hand operand of type 'const T' (or there is no acceptable conversion)
...\boost\test\tools\detail\print_helper.hpp 54
Error C2338 Type has to implement operator<< to be printable
...\boost\test\tools\detail\print_helper.hpp 52
我们在输出代码库中有很多类型不提供 operator<<
并且不得不定义一个只是为了使数据测试用例的编译成为可能似乎很烦人。
这是BOOST_DATA_TEST_CASE如何从数据构建测试用例的限制,还是有什么办法可以解决这个问题?
初步说明:
- 在单元测试文件本身中定义一个独立的基本输出操作符显然就足够了,类型不需要提供一个globally/generically。当可打印性与测试无关时,这仍然很烦人。
- 我实际上在样本类型包含
std::vector
和 std::tuple
的地方点击了这个:对于这些标准库容器,cxx-prettyprint 在测试中是一个很好的(-足够)解决方案案例。
确实 BOOST_DATA_TEST_CASE
的 current implementation 要求参数是可打印的:在测试开始之前,一个 BOOST_TEST_CONTEXT
是用当前测试参数在夹具中创建的,这样Boost.Test 框架可以 log/print 特定参数集的消息(特别是打印精确的错误消息)。
此外,默认情况下,STL 容器没有默认打印,尽管应该可以实现模板 class 和 the logging customization 的打印。
我正在尝试获取一些数据驱动的测试用例 运行 BOOST_DATA_TEST_CASE
并了解目前的基础知识。
但是,我注意到用作样本输入的类型必须是可打印的:
这会起作用:
std::vector<std::string> printable_cases = { "case1", "case2" };
BOOST_DATA_TEST_CASE(test_mvex, utdata::make(printable_cases), sample) {
// Do some tests with sample
}
这行不通:
struct Thingmajig {
// I really don't care for printability!
explicit Thingmajig(int a, int b) { c = a + b; }
int c;
};
std::vector<Thingmajig> nonprintable_cases = { Thingmajig(1, 2), Thingmajig(4, 7) };
BOOST_DATA_TEST_CASE(test_mvex2, utdata::make(nonprintable_cases), sample) {
// Do some tests with sample
}
它会出错:
Error C2679 binary '<<': no operator found which takes a right-hand operand of type 'const T' (or there is no acceptable conversion)
...\boost\test\tools\detail\print_helper.hpp 54
Error C2338 Type has to implement operator<< to be printable
...\boost\test\tools\detail\print_helper.hpp 52
我们在输出代码库中有很多类型不提供 operator<<
并且不得不定义一个只是为了使数据测试用例的编译成为可能似乎很烦人。
这是BOOST_DATA_TEST_CASE如何从数据构建测试用例的限制,还是有什么办法可以解决这个问题?
初步说明:
- 在单元测试文件本身中定义一个独立的基本输出操作符显然就足够了,类型不需要提供一个globally/generically。当可打印性与测试无关时,这仍然很烦人。
- 我实际上在样本类型包含
std::vector
和std::tuple
的地方点击了这个:对于这些标准库容器,cxx-prettyprint 在测试中是一个很好的(-足够)解决方案案例。
确实 BOOST_DATA_TEST_CASE
的 current implementation 要求参数是可打印的:在测试开始之前,一个 BOOST_TEST_CONTEXT
是用当前测试参数在夹具中创建的,这样Boost.Test 框架可以 log/print 特定参数集的消息(特别是打印精确的错误消息)。
此外,默认情况下,STL 容器没有默认打印,尽管应该可以实现模板 class 和 the logging customization 的打印。