谷歌测试中的数组比较?

新手上路,请多包涵

我正在寻找比较谷歌测试中的两个数组。在 UnitTest++ 中,这是通过 CHECK_ARRAY_EQUAL 完成的。你如何在谷歌测试中做到这一点?

原文由 Tobias Furuholm 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 760
2 个回答

我真的建议看看 Google C++ Mocking Framework 。即使您不想模拟任何东西,它也允许您轻松编写相当复杂的断言。

例如

//checks that vector v is {5, 10, 15}
ASSERT_THAT(v, ElementsAre(5, 10, 15));

//checks that map m only have elements 1 => 10, 2 => 20
ASSERT_THAT(m, ElementsAre(Pair(1, 10), Pair(2, 20)));

//checks that in vector v all the elements are greater than 10 and less than 20
ASSERT_THAT(v, Each(AllOf(Gt(10), Lt(20))));

//checks that vector v consist of
//   5, number greater than 10, anything.
ASSERT_THAT(v, ElementsAre(5, Gt(10), _));

每种可能的情况都有很多 匹配器,您可以将它们组合起来以实现几乎任何目标。

我是否告诉过你 ElementsAre 只需要 iteratorssize() 类上的方法才能工作?所以它不仅适用于 STL 的任何容器,也适用于自定义容器。

Google Mock 声称几乎与 Google Test 一样便携,坦率地说,我不明白您为什么不使用它。这简直太棒了。

原文由 vava 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用今天的版本,您只需为您的枚举类类型声明 operator<< ,但 在与枚举相同的命名空间 中(请参阅 https://github.com/google/googletest/blob/main/docs/ advanced.md#teaching-googletest-how-to-print-your-values

 namespace Foo
{
    enum class Bar
    {
        Hello,
        Goodbye,
    };

    // In the same namespace !!
    inline std::ostream& operator<<(std::ostream& os, const Bar& v)
    {
        switch (v)
        {
            case Bar::Hello: os << "Hello"; break;
            case Bar::Goodbye: os << "Goodbye"; break;
        }
        return os;
    }
}

TEST(Suite, Demo1)
{
    using namespace Foo;

    vector<Bar> vec1 = { Bar::Hello, Bar::Goodbye };
    vector<Bar> vec2 = { Bar::Goodbye };

    ASSERT_EQ(vec1, vec2);
}

 test.cpp(106): error: Expected equality of these values:
  vec1
    Which is: { Hello, Goodbye }
  vec2
    Which is: { Goodbye }
[  FAILED  ] Suite.Demo1 (1 ms)

``

原文由 56ka 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题