使用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_; \
^
根据 docs,TypedEq
接受值,而不是匹配器。如果您想简单地静态验证类型,请使用 A
匹配器:
EXPECT_CALL(MOCKA_obj, write_data(_, A<const range_t&>()))
我有 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_; \ ^
根据 docs,TypedEq
接受值,而不是匹配器。如果您想简单地静态验证类型,请使用 A
匹配器:
EXPECT_CALL(MOCKA_obj, write_data(_, A<const range_t&>()))