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

Test that two std::vectors are equal using CATCH C++ unit test framework

本文关键字:std 两个 向量 是否 单元测试 C++ CATCH 框架 测试 使用      更新时间:2023-10-16

我是使用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};如果两个向量因此而不相等,那也没关系。

您可以使用运算符==:

REQUIRE(vec_1 == vec_2)

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

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