我正在使用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。

10-01 19:56
查看更多