С++ тест Google прерывается в Ubuntu, вызывая Notify() несколько раз для объекта уведомления

Я использую Google Test и Google Mock. Существует фиктивный объект, для которого я ожидаю вызова метода OnConnectionError(), который уведомляет объект absl::Notification done 3 раза.

  absl::Notification done;
  EXPECT_CALL(*client, OnConnectionError(::testing::_)).Times(3)
    .WillRepeatedly(Notify(&done));

  bool result = client->ConnectToServer("localhost", 5000, 2);

  done.WaitForNotificationWithTimeout(absl::Duration(absl::Seconds(30)));

Метод client->ConnectToServer имеет цикл, который приводит к повторяющемуся вызову OnConnectionError, что вполне нормально и обеспечивает желаемое поведение.

В Windows модульный тест проходит нормально. Когда jenkins запускает его на Ubuntu, он прерывает весь тестовый прогон (а не только один тест!!) со следующим выводом.

[notification.cc : 32] RAW: Notify() method called more than once for Notification object 0x7ffffde87320

Разве нельзя вызывать объект Notification несколько раз? Почему тест проходит успешно в Windows и прерывается в Ubuntu?

большое спасибо за поддержку!


person Rene Lorenz    schedule 25.11.2020    source источник


Ответы (1)


Я нашел ответ самостоятельно: я просмотрел соответствующий источник Google на спуске. В уведомление.cc я нашел соответствующее сообщение об ошибке. Соответствующая исходная часть окружена

#ifndef NDEBUG

Я отредактировал файл CMakeLists, чтобы перестроить его в режиме выпуска, добавив строку set(CMAKE_BUILD_TYPE Release), поэтому флаг NDEBUG определяется во время компиляции.

Как следствие, не связанный напрямую с этой проблемой, я реорганизовал тестируемый код таким образом, чтобы избежать цикла, который уведомляет объект absl::Notification несколько раз, поскольку эта проблема показала мне, что есть потребность в улучшении кода. .

person Rene Lorenz    schedule 30.11.2020