使用CATCH C++单元测试框架测试两个std::vectors是否相等

12

我刚开始使用CATCH,我想知道如何测试两个std::vectors是否相等。

我的非常幼稚的尝试如下:

#define CATCH_CONFIG_MAIN
#include "catch.hpp"
#include <vector>

TEST_CASE( "are vectors equal", "vectors")
{
  std::vector<int> vec_1 = {1,2,3};
  std::vector<int> vec_2 = {1,2,3};

  REQUIRE (vec_1.size() == vec_2.size());

  for (int i = 0; i < vec_1.size(); ++i)
    REQUIRE (vec_1[i] == vec_2[i]);
}

有没有更好的方式来做到这一点?像 REQUIRE_VECTOR_EQUAL 这样神奇的东西?

此外,如果一个数组包含了双精度数 {1.0, 2.0, 3.0},我的以上解决方案也会通过测试;如果由于这个原因两个向量被认为不相等,也是可以接受的。


2
你仍然可以执行 REQUIRE(vec_1 == vec_2); - Jarod42
@Jarod42,谢谢,这确实有效。唯一的问题是,如果vec_1vec_2是不同的数据类型,我会收到一个错误,而不是false - Akavall
@Akavall 如果它们是不同的数据类型,那么它就无法编译。这就是强类型语言应该工作的方式。 - Paul Manta
1个回答

14
你可以使用operator==
REQUIRE(vec_1 == vec_2)

很酷的是,当断言失败时,Catch会产生出色的输出,而不仅仅是简单的通过/不通过:

../test/Array_Vector_Test.cpp:90: FAILED:
  CHECK( x == y )
with expansion:
  { "foo", "bar" }
  ==
  { "foo", "quux", "baz" }

注意:您也可以内联向量,以确保split(input)等于std::vector<string>{"one", "two", "three"}。 - lfmunoz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接