C++ Google 测试在 Ubuntu 对 Notification 对象多次调用 Notify() 时中止
C++ Google test aborts on Ubuntu calling Notify() multiple times on Notification object
我使用 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 上,单元测试顺利通过。当 jenkins 运行 在 ubuntu 上使用它时,它会中止整个测试 运行(不仅没有通过一个测试!!),并输出以下内容。
[notification.cc : 32] RAW: Notify() method called more than once for Notification object 0x7ffffde87320
是否不允许多次调用Notification对象?为什么测试在 Windows 上成功并在 ubuntu 上中止?
非常感谢您的支持!
我自己找到了答案:
我查看了 google 绳降的相关来源。在 notification.cc 中,我找到了相关的错误消息。各自的源代码部分被一个
包围
#ifndef NDEBUG
我编辑了 CMakeLists 文件,以便通过添加行 set(CMAKE_BUILD_TYPE Release)
在 Release 模式下重建它,所以 NDEBUG 标志是在编译时定义的。
因此与这个问题没有直接关系,我以某种方式重构了被测代码,以避免循环,多次通知 absl::Notification 对象,因为这个问题告诉我有改进代码的需求。
我使用 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 上,单元测试顺利通过。当 jenkins 运行 在 ubuntu 上使用它时,它会中止整个测试 运行(不仅没有通过一个测试!!),并输出以下内容。
[notification.cc : 32] RAW: Notify() method called more than once for Notification object 0x7ffffde87320
是否不允许多次调用Notification对象?为什么测试在 Windows 上成功并在 ubuntu 上中止?
非常感谢您的支持!
我自己找到了答案: 我查看了 google 绳降的相关来源。在 notification.cc 中,我找到了相关的错误消息。各自的源代码部分被一个
包围#ifndef NDEBUG
我编辑了 CMakeLists 文件,以便通过添加行 set(CMAKE_BUILD_TYPE Release)
在 Release 模式下重建它,所以 NDEBUG 标志是在编译时定义的。
因此与这个问题没有直接关系,我以某种方式重构了被测代码,以避免循环,多次通知 absl::Notification 对象,因为这个问题告诉我有改进代码的需求。