Tes C++ Google dibatalkan di Ubuntu yang memanggil Notify() beberapa kali pada objek Notifikasi

saya menggunakan tes google dan google mock. Ada objek tiruan di mana saya mengharapkan pemanggilan metode OnConnectionError() yang memberi tahu objek absl::Notification done sebanyak 3 kali.

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

Metode client->ConnectToServer memiliki perulangan yang menghasilkan panggilan berulang OnConnectionError, yang sepenuhnya baik-baik saja dan merupakan perilaku yang diinginkan.

Di Windows, pengujian unit berjalan dengan baik. Ketika jenkins menjalankannya di ubuntu, ia membatalkan seluruh pengujian yang dijalankan (tidak hanya gagal dalam satu pengujian!!) dengan output berikut.

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

Apakah tidak diperbolehkan memanggil objek Notifikasi berkali-kali? Mengapa tes berhasil di Windows dan dibatalkan di ubuntu?

terima kasih banyak atas dukungan Anda!


person Rene Lorenz    schedule 25.11.2020    source sumber


Jawaban (1)


Saya menemukan jawabannya sendiri: Saya meninjau sumber relevan dari google abseil. Di notifikasi.cc saya menemukan pesan kesalahan yang relevan. Masing-masing bagian sumber dikelilingi oleh a

#ifndef NDEBUG

Saya mengedit file CMakeLists untuk membangunnya kembali dalam mode Rilis dengan menambahkan baris set(CMAKE_BUILD_TYPE Release), sehingga flag NDEBUG ditentukan pada waktu kompilasi.

Sebagai konsekuensinya tidak terkait langsung dengan masalah ini, saya memfaktorkan ulang kode yang sedang diuji sedemikian rupa, untuk menghindari loop, yang memberi tahu objek absl::Notification beberapa kali, karena masalah ini menunjukkan kepada saya bahwa ada permintaan untuk meningkatkan kode .

person Rene Lorenz    schedule 30.11.2020