模拟 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 的,它不会是你的解决方案。