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对象的循环,因为此问题表明需要改进代码