C++ GMock SetArrayaGument双重自由或腐败
编辑:我自己解决了双重自由错误,但是问题(问题1)为什么它的行为不同于命令行和CLion内部仍然存在C++ GMock SetArrayaGument双重自由或腐败,c++,memory,googletest,googlemock,double-free,C++,Memory,Googletest,Googlemock,Double Free,编辑:我自己解决了双重自由错误,但是问题(问题1)为什么它的行为不同于命令行和CLion内部仍然存在 我正在尝试使用gmock和gtest。我想模拟一个函数,它将指针作为参数,并用内容填充它。我的模拟类具有以下功能: //MockUdpServer class MOCK_METHOD(int, receive_msg_impl, (unsigned char *buf, int sec, int usec)); virtual int receive_msg(unsigned char *b
我正在尝试使用gmock和gtest。我想模拟一个函数,它将指针作为参数,并用内容填充它。我的模拟类具有以下功能:
//MockUdpServer class
MOCK_METHOD(int, receive_msg_impl, (unsigned char *buf, int sec, int usec));
virtual int receive_msg(unsigned char *buf, int sec = -1, int usec = -1) override {
return receive_msg_impl(buf, sec, usec);
}
我的测试代码如下所示:
TEST(Action, ref) {
MockUdpServer mock_server;
unsigned char test[]={0x0, 0x61}
EXPECT_CALL(mock_server, receive_msg_impl)
.WillOnce(SetArrayArgument<0>(test, test+2));
unsigned char a[256];
mock_server.receive_msg(a);
}
有两件事让我困惑:
MockUdpServer
并在其上内部调用receive\u msg
。此调用成功。为什么它不能直接在测试本身中工作?回答:在其他测试用例中,我使用了DoAll并指定了返回值和数组co。))编辑:显然,测试代码必须指定返回值,即使它未被使用。以下代码不会产生任何错误:
TEST(Action, ref) {
MockUdpServer mock_server;
unsigned char test[]={0x0, 0x61}
EXPECT_CALL(mock_server, receive_msg_impl)
.WillOnce(DoAll(
SetArrayArgument<0>(test, test+2),
Return(2)));
unsigned char a[256];
mock_server.receive_msg(a);
}
测试(动作,参考){
MockUdpServer mock_server;
无符号字符测试[]={0x0,0x61}
期望调用(模拟服务器,接收消息)
.威洛斯(道尔)(
SetArrayArgument(测试,测试+2),
返回(2));
无符号字符a[256];
模拟服务器。接收消息(a);
}
TEST(Action, ref) {
MockUdpServer mock_server;
unsigned char test[]={0x0, 0x61}
EXPECT_CALL(mock_server, receive_msg_impl)
.WillOnce(DoAll(
SetArrayArgument<0>(test, test+2),
Return(2)));
unsigned char a[256];
mock_server.receive_msg(a);
}