C++ C++;Google测试在Ubuntu上中止多次在Notification对象上调用Notify()

C++ C++;Google测试在Ubuntu上中止多次在Notification对象上调用Notify(),c++,linux,googletest,googlemock,abseil,C++,Linux,Googletest,Googlemock,Abseil,我使用谷歌测试和谷歌模拟。 有一个模拟对象,我希望在该对象上有一个方法调用OnConnectionError(),它会通知absl::Notification对象done3次 absl::Notification done; EXPECT_CALL(*client, OnConnectionError(::testing::_)).Times(3) .WillRepeatedly(Notify(&done)); bool result = client->Co

我使用谷歌测试和谷歌模拟。 有一个模拟对象,我希望在该对象上有一个方法调用
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
是否不允许多次调用通知对象?为什么测试在Windows上成功而在ubuntu上中止


非常感谢您的支持

我自己找到了答案: 我查阅了谷歌abseil的相关来源。在notification.cc中,我找到了相关的错误消息。相应的源部件由一个

#ifndef NDEBUG
我编辑了CMakeLists文件,以便通过添加行
set(CMAKE\u BUILD\u TYPE Release)
在发布模式下重建它,因此NDEBUG标志在编译时定义

由于与此问题没有直接联系,我以某种方式重构了测试中的代码,以避免多次通知absl::Notification对象的循环,因为此问题表明需要改进代码