Ошибка GMock EXPECT_CALL, но тест возвращает OK при имитации функций C

Я пытаюсь издеваться над интерфейсом libusb C на основе ответа здесь: https://stackoverflow.com/a/41640864/1752391< /а>

Тесты выполняются нормально, если я действительно вызываю ожидаемые функции, но когда вызов функции закомментирован, тест показывает ошибку (количество вызовов не совпадает), но окончательный результат теста в порядке.

Я нашел некоторую информацию о том, что тестирование со статическими объектами может вызвать это, бит в ответе mathandi только указатель является статическим, и объект уничтожается в деструкторе TestFixture. Также пробовал создавать и уничтожать объект внутри функции TEST_F, но это не помогло.

Это может быть ошибка GMock, но я очень в этом сомневаюсь. Вот некоторый код, чтобы воспроизвести это:

class Context {
  libusb_context* context;
public:
  Context() {
    // Function call is commented out, should cause an error
    // libusb_init(&context);
  }
  ...
}

И тест:

TEST_F(LibusbTests, contextConstructTest) {
  EXPECT_CALL(*libusbMock, libusb_init(Ne(nullptr)))
    .WillOnce(Return(0));
  EXPECT_NO_THROW({ Libusb::Context(); });
}

Я не включил другой необходимый код, необходимый для тестирования свободной функции C, но мой указатель libusbMock такой же, как указатель _bcm2835libMock от mathandi.

Кто-нибудь знает, что я пропустил?


person CsorvaGep    schedule 02.08.2020    source источник
comment
Это может быть ошибка в GoogleTest версии 1.10.0, связанная с #2890 или #2974.   -  person CsorvaGep    schedule 03.08.2020