繁体   English   中英

模拟recvmsg函数时如何返回错误代码?

[英]how to return the error code when mocking a recvmsg function?

我正在使用 google test 和 google mock 来测试一些 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的返回值设置为 -1 时,如何将errno为 EINTR 或EAGAIN

Google Mock docs 中有一个名为SetErrnoAndReturn(errnum, value)的标准操作。

您不能模拟自由函数,而只能模拟虚拟成员函数。

文档中模拟自由函数的建议解决方案是定义一个接口,导出与自由函数具有相同签名的虚拟成员函数。 然后定义一个实现,该实现包含对生产代码的自由函数的调用和用于测试的模拟。 因此,如果您的测试代码是纯 C 语言,则它不是适合您的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM