Используйте TypedEq () для сопоставления типа std :: vector ‹std :: vector›

У меня есть 2 фиктивных метода

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));
}

Я хочу ожидать вызова 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: требуется отсюда build /../ gmock / include / gmock / gmock.h: 5564: 41: ошибка: нет соответствия для 'operator ==' (типы операндов - 'std :: vector> 'и' const testing :: internal :: AnythingMatcher ') GMOCK_IMPLEMENT_COMPARISON_MATCHER_ (Eq, ==, "равно", "не равно"); ^

build /../ gmock / include / gmock / gmock.h: 5544: 20: примечание: в определении макроса 'GMOCK_IMPLEMENT_COMPARISON_MATCHER_' return lhs op rhs_; \ ^

build /../ gmock / include / gmock / gmock.h: 5564: 41: note: кандидатами являются: GMOCK_IMPLEMENT_COMPARISON_MATCHER_ (Eq, ==, "равно", "не равно"); ^

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: note: template bool testing :: internal :: operator == (T *, const testing :: internal :: connected_ptr &) bool operator == (T * ptr, const connected_ptr & x) {^

build /../ gmock / include / gtest / gtest.h: 9173: 6: note: ошибка вывода / подстановки аргумента шаблона: в файле, включенном из сборки /../ test.h: 11: 0, из test.cc. Копия: 7:

build /../ gmock / include / gmock / gmock.h: 5564: 41: примечание: несовпадающие типы 'T *' и 'std :: vector>' GMOCK_IMPLEMENT_COMPARISON_MATCHER_ (Eq, ==, "равно", "isn 'не равно "); ^

build /../ gmock / include / gmock / gmock.h: 5544: 20: примечание: в определении макроса 'GMOCK_IMPLEMENT_COMPARISON_MATCHER_' return lhs op rhs_; \ ^


person Anip Patel    schedule 25.02.2017    source источник
comment
Я не понимаю, чем могут быть полезны ошибки, если мы не видим строк, на которые жалуются ошибки.   -  person Janarth K    schedule 25.02.2017
comment
Он жалуется на EXPECT_CALL. Я предоставил этот range_t. Нужно ли мне предоставлять компаратор для нестандартного типа.   -  person Anip Patel    schedule 25.02.2017


Ответы (1)


Согласно документам TypedEq принимает значение, не совпадение. Если вы хотите просто проверить тип статически, используйте сопоставитель A:

EXPECT_CALL(MOCKA_obj, write_data(_, A<const range_t&>()))
person VladLosev    schedule 25.02.2017
comment
Спасибо. Это сработало. TypedEq требует значения, и я предоставил _ для соответствия любому значению, но это не работает. - person Anip Patel; 27.02.2017