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如何从数据构建测试用例的限制,还是有什么办法可以解决这个问题?


初步说明:

确实 BOOST_DATA_TEST_CASEcurrent implementation 要求参数是可打印的:在测试开始之前,一个 BOOST_TEST_CONTEXT 是用当前测试参数在夹具中创建的,这样Boost.Test 框架可以 log/print 特定参数集的消息(特别是打印精确的错误消息)。

此外,默认情况下,STL 容器没有默认打印,尽管应该可以实现模板 class 和 the logging customization 的打印。