使用TypedEq()匹配类型std::vector<std::vector>

Use TypedEq() to match the type std::vector<std::vector>

我有 2 个 mock 方法

struct temp_struct
{
int x;
};

using range = std::vector<std::vector<temp_struct>>;

Class MockA: public A
{
public:
   MOCK_METHOD1(write_data, int(int a, int b));
   MOCK_METHOD1(write_data, int(int a, const range &ranges));
}

我想以范围作为参数进行 expect 调用 write_data。我想要 匹配类型以避免歧义。我不想比较那个论点的价值。

TEST_F(MyTest, test1)
{
    ...
    EXPECT_CALL(MOCKA_obj, write_data(_, TypedEq<const range_t&>(_)))
       .Times(1)
       .WillOnce(Return(0));
    ...
}

它给我以下错误:

test.cc.cc:256:1: 需要从这里构建/../gmock/include/gmock/gmock.h:5564:41: 错误:'operator==' 不匹配(操作数类型是 'std::vector >' 和 'const testing::internal::AnythingMatcher') GMOCK_IMPLEMENT_COMPARISON_MATCHER_(Eq, ==, "is equal to", "isn't equal to"); ^

build/../gmock/include/gmock/gmock.h:5544:20: 注意:在宏定义中 'GMOCK_IMPLEMENT_COMPARISON_MATCHER_' return lhs op rhs_; \ ^

build/../gmock/include/gmock/gmock.h:5564:41:注意:候选人是: GMOCK_IMPLEMENT_COMPARISON_MATCHER_(Eq, ==, "is equal to", "isn't equal to"); ^

build/../gmock/include/gmock/gmock.h:5544:20: 注意:在宏定义中 'GMOCK_IMPLEMENT_COMPARISON_MATCHER_' return lhs op rhs_; \ ^

在 test.cc.cc:3:0 包含的文件中: build/../gmock/include/gtest/gtest.h:9173:6: 注意:模板 bool testing::internal::operator==(T*, const testing::internal::linked_ptr&) bool operator==(T* ptr, const linked_ptr& x) { ^

build/../gmock/include/gtest/gtest.h:9173:6: 注意:模板参数 deduction/substitution 失败: 在 build/../test.h:11:0 包含的文件中, 来自 test.cc.cc:7:

build/../gmock/include/gmock/gmock.h:5564:41: 注意:不匹配的类型 'T*' 和 'std::vector >' GMOCK_IMPLEMENT_COMPARISON_MATCHER_(Eq, ==, "is equal to", "isn't equal to"); ^

build/../gmock/include/gmock/gmock.h:5544:20: 注意:在宏定义中 'GMOCK_IMPLEMENT_COMPARISON_MATCHER_' return lhs op rhs_; \ ^

根据 docsTypedEq 接受值,而不是匹配器。如果您想简单地静态验证类型,请使用 A 匹配器:

EXPECT_CALL(MOCKA_obj, write_data(_, A<const range_t&>()))