c++ - Google 测试中的 BOOST_CHECK_EQUAL_COLLECTIONS

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

我一直试图在 Google C++ Testing Framework / gtest 中找到断言这相当于 BOOST_CHECK_EQUAL_COLLECTIONSBoost Test Library 中发现的断言.

但是;没有成功。所以我的问题有两个方面:

  1. 是否gtest有等效的断言吗?
  2. 如果不是:如何在 gtest 中断言容器内容? ?

编辑(略微修改的答案):

#include <iostream>

template<typename LeftIter, typename RightIter>
::testing::AssertionResult CheckEqualCollections(LeftIter left_begin,
                                                 LeftIter left_end,
                                                 RightIter right_begin)
{
    std::stringstream message;
    std::size_t index(0);
    bool equal(true);

    for(;left_begin != left_end; left_begin++, right_begin++) {
        if (*left_begin != *right_begin) {
            equal = false;
            message << "\n  Mismatch in position " << index << ": " << *left_begin << " != " <<  *right_begin;
        }
        ++index;
    }
    if (message.str().size()) {
        message << "\n";
    }
    return equal ? ::testing::AssertionSuccess() :
                   ::testing::AssertionFailure() << message.str();
}

最佳答案

正如 Alex 所指出的,gtest 有一个名为 Google Mock 的姊妹项目,它具有用于比较两个容器的出色工具:

EXPECT_THAT(actual, ContainerEq(expected));
// ElementsAre accepts up to ten parameters.
EXPECT_THAT(actual, ElementsAre(a, b, c));
EXPECT_THAT(actual, ElementsAreArray(array));

您可以在 Google Mock's wiki 找到更多信息.

关于c++ - Google 测试中的 BOOST_CHECK_EQUAL_COLLECTIONS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15448047/

相关文章:

asp.net-mvc - 帮助为测试响应 header 创建单元测试,特别是 Cache-Control,以确定缓存是否已禁用

java - 在 Mockito 的单元测试中使用带有 @Required 字段的类

c++ - 引用谷歌测试/模拟框架中的数组参数

c++ - 字符串输入复制文本

c++ - C++11 lambda 表达式背后的动机是什么?

c++ - 堆栈中的 pop() 未删除任何元素

c++ - c_str 函数有什么用?

unit-testing - 作为接口(interface)访问的单例的单元测试

c++ - 使用命令行标志删除 Google Test boiler 框架输出

c++ - CTest项目目录。找不到测试