Тест Google - Сравнение массива как параметра void *

0

Я получил следующий тест, чтобы сделать то, что я хочу.

MOCK_METHOD2(write, void(unsigned char*, int));


unsigned char bar[] = {1,2,3};

EXPECT_CALL(foo, write(_, sizeof(bar))).With((ElementsAreArray(bar)));

Но если я изменю тип параметра на void * для функции, как показано ниже, она не будет компилироваться.

MOCK_METHOD2(write, void(void*, int));

С ошибкой:

error C2182: 'abstract declarator' : illegal use of type 'void'
    gmock-matchers.h(2536) : see reference to class template instantiation 'testing::internal::ElementsAreMatcherImpl<Container>' being compiled
    with
    [
        Container=const std::tuple<void *,unsigned char>
    ]

Это имеет смысл, я думаю, но я не могу найти способ решить это, где аргумент - это пустота *, которая должна быть здесь. Есть ли возможность решить это?

Теги:
googletest
void-pointers

2 ответа

0

ElementsAreArray необходимо разыменовать указатель аргументов, чтобы сравнить его, и указатели void* не могут быть разыменованы. Вам нужно будет memcmp к пользовательскому совпадению для сравнения буферов, переданных как void*:

MATCHER_P2(HasBytes, bytes, size, "") {
  return arg1 == size && memcmp(arg0, bytes, size) == 0;
}

EXPECT_CALL(foo, write(_, sizeof(bar))).With(Args<0, 1>(HasBytes(bar, sizeof bar)));
0

Неправильное использование контейнера контейнера ElementsAreArray с помощью void*

Попробуйте найти правильный матчи для void* отсюда

Ещё вопросы

Сообщество Overcoder
Наверх
Меню