การทดสอบ C ++ Google ยกเลิกบน Ubuntu ที่เรียก Notify () หลายครั้งบนวัตถุการแจ้งเตือน

ฉันใช้การทดสอบของ Google และ Google จำลอง มีวัตถุจำลองที่ฉันคาดว่าจะมีการเรียกเมธอด 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 การทดสอบหน่วยผ่านได้ดี เมื่อเจนกินส์รันบน Ubuntu มันจะยกเลิกการทดสอบทั้งหมด (ไม่ใช่แค่การทดสอบล้มเหลวเพียงครั้งเดียว!!) ด้วยเอาต์พุตต่อไปนี้

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

ไม่อนุญาตให้เรียกออบเจ็กต์การแจ้งเตือนหลายครั้งหรือไม่ เหตุใดการทดสอบจึงประสบความสำเร็จบน Windows และยกเลิกบน Ubuntu

ขอบคุณมากสำหรับการสนับสนุนของคุณ!


person Rene Lorenz    schedule 25.11.2020    source แหล่งที่มา


คำตอบ (1)


ฉันพบคำตอบด้วยตัวเอง: ฉันตรวจสอบแหล่งที่มาของ Google Abseil ที่เกี่ยวข้องแล้ว ใน alert.cc ฉันพบข้อความแสดงข้อผิดพลาดที่เกี่ยวข้อง ส่วนแหล่งที่มานั้นล้อมรอบด้วย

#ifndef NDEBUG

ฉันแก้ไขไฟล์ CMakeLists เพื่อสร้างมันใหม่ในโหมด Release โดยเพิ่มบรรทัด set(CMAKE_BUILD_TYPE Release) ดังนั้นจึงกำหนดแฟล็ก NDEBUG ในเวลาคอมไพล์

เนื่องจากไม่ได้เชื่อมโยงโดยตรงกับปัญหานี้ ฉันจึงปรับโครงสร้างโค้ดภายใต้การทดสอบใหม่ในลักษณะหนึ่ง เพื่อหลีกเลี่ยงการวนซ้ำ ซึ่งจะแจ้งเตือนวัตถุ absl::Notification หลายครั้ง เนื่องจากปัญหานี้แสดงให้ฉันเห็นว่ามีความต้องการในการปรับปรุงโค้ด .

person Rene Lorenz    schedule 30.11.2020