我正在使用 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::equal
或 std::mismatch
,但这也需要大量的样板文件。
有没有更简洁的方法来做到这一点?
最佳答案
使用 BOOST_CHECK_EQUAL_COLLECTIONS
.它是 test_tools.hpp
中的一个宏,它采用两对迭代器:
BOOST_CHECK_EQUAL_COLLECTIONS(values.begin(), values.end(),
expected.begin(), expected.end());
它将报告不匹配的索引和值。如果大小不匹配,它也会报告(并且不会超出 vector 的末端)。
请注意,如果您想将 BOOST_CHECK_EQUAL
或 BOOST_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/