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

时间:2015-10-15 11:22:54

标签: c googletest googlemock

我正在使用谷歌测试和谷歌模拟来测试一些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));

但是当我将模拟函数errno的返回值设置为-1时,如何将EAGAIN设置为EINTR或recvmsg

2 个答案:

答案 0 :(得分:0)

SetErrnoAnddReturn(errnum, value)中有一个名为test <- function(x) { x + 0.25 } y <- 0 for(i in 1:5) { y <- test(y) print(y) } 的标准操作。

答案 1 :(得分:0)

你不能模拟自由函数,只能模拟类虚拟成员函数。

the docs中模拟自由函数的建议解决方案是定义一个导出虚拟成员函数的接口,该函数具有与自由函数相同的签名。然后定义一个实现,它包含对生产代码的自由函数的调用和用于测试的模拟。因此,如果您的测试代码是纯C,那么它将无法成为您的解决方案。