c++ - 如何将 vector 与 Boost.Test 进行比较?

标签 c++ unit-testing boost boost-unit-test-framework

我正在使用 Boost Test 对一些 C++ 代码进行单元测试。

我有一个值 vector 需要与预期结果进行比较,但我不想手动检查循环中的值:

BOOST_REQUIRE_EQUAL(values.size(), expected.size());

for( int i = 0; i < size; ++i )
{
    BOOST_CHECK_EQUAL(values[i], expected[i]);
}

主要问题是循环检查不打印索引,所以需要一些搜索才能找到不匹配的地方。

我可以在两个 vector 上使用 std::equalstd::mismatch,但这也需要大量的样板文件。

有没有更简洁的方法来做到这一点?

最佳答案

使用 BOOST_CHECK_EQUAL_COLLECTIONS .它是 test_tools.hpp 中的一个宏,它采用两对迭代器:

BOOST_CHECK_EQUAL_COLLECTIONS(values.begin(), values.end(), 
                              expected.begin(), expected.end());

它将报告不匹配的索引和值。如果大小不匹配,它也会报告(并且不会超出 vector 的末端)。


请注意,如果您想将 BOOST_CHECK_EQUALBOOST_CHECK_EQUAL_COLLECTIONS 与非 POD 类型一起使用,则需要实现

bool YourType::operator!=(const YourType &rhs)  //  or OtherType
std::ostream &operator<<(std::ostream &os, const YourType &yt)

分别用于比较和记录。
传递给 BOOST_CHECK_EQUAL_COLLECTIONS 的迭代器的顺序决定了 != 比较的 RHS 和 LHS - 第一个迭代器范围将是比较中的 LHS。

关于c++ - 如何将 vector 与 Boost.Test 进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3999644/

相关文章:

c++ - C/C++ NaN 常量(字面量)?

c++ - 指向类函数数组的指针

C++ STL - 遍历序列中的所有内容

Mysql2 响应不适用于 Ruby 中的收集方法

java - 如何与 ExtJS MessageBox 元素中的按钮进行交互?

c++ - boost asio tcp 异步读/写

c++ - 如何在 C/C++ 中将 typedef 函数作为参数传递

java - 每次单元测试后回滚

c++ - Mac 无法编译,Windows 和 Linux 可以 - Boost ASIO?

c++ - 检查 boost 属性树中的值是树还是终端值