模拟 recvmsg 函数时如何 return 错误代码?
how to return the error code when mocking a recvmsg function?
我正在使用 google 测试和 google 模拟来测试一些 C 代码:
struct msghdr message;
int retval;
retval = recvmsg(fd,&message,0);
if(retval == EINTR || retval == EAGAIN)
{
// do something here
}
在我的模拟文件中,我模拟了 recvmsg
函数:
MOCK_CONST_METHOD3(recvmsg, int(int fd, struct msghdr *msg, int flags));
但是当我将模拟函数 recvmsg
的 return 值设置为 -1 时,如何将 errno
设置为 EINTR 或 EAGAIN
?
有一个名为 SetErrnoAndReturn(errnum, value)
的标准操作,在 Google Mock docs 中有描述。
您不能模拟自由函数,只能模拟 class 个虚拟成员函数。
the docs 中提出的模拟自由函数的解决方案是定义一个接口,该接口导出一个与自由函数具有相同签名的虚拟成员函数。然后定义一个实现,它包含对生产代码的自由函数的调用和用于测试的模拟。所以如果你的测试代码是纯 C 的,它不会是你的解决方案。
我正在使用 google 测试和 google 模拟来测试一些 C 代码:
struct msghdr message;
int retval;
retval = recvmsg(fd,&message,0);
if(retval == EINTR || retval == EAGAIN)
{
// do something here
}
在我的模拟文件中,我模拟了 recvmsg
函数:
MOCK_CONST_METHOD3(recvmsg, int(int fd, struct msghdr *msg, int flags));
但是当我将模拟函数 recvmsg
的 return 值设置为 -1 时,如何将 errno
设置为 EINTR 或 EAGAIN
?
有一个名为 SetErrnoAndReturn(errnum, value)
的标准操作,在 Google Mock docs 中有描述。
您不能模拟自由函数,只能模拟 class 个虚拟成员函数。
the docs 中提出的模拟自由函数的解决方案是定义一个接口,该接口导出一个与自由函数具有相同签名的虚拟成员函数。然后定义一个实现,它包含对生产代码的自由函数的调用和用于测试的模拟。所以如果你的测试代码是纯 C 的,它不会是你的解决方案。