我有一个使用套接字的函数,我会模拟它,但我找不到如何做到这一点。
有没有办法在 C 中模拟套接字?
Thanks
大多数系统/库函数是弱符号 https://en.wikipedia.org/wiki/Weak_symbol。这意味着您可以创建自己的实现来覆盖现有版本。然后您可以在单元测试时使用这些函数。
假设您要测试以下功能:
src.c:
int get_socket()
{
int s;
s = socket(AF_INET, SOCK_DGRAM, 0);
if (s == -1) {
perror("socket failed");
} else {
printf("socket success\n");
close(s);
}
return s;
}
然后,您可以在单独的源文件中创建模拟函数(以及任何控制变量):
模拟套接字.c:
int sock_rval;
int socket(int domain, int type, int protocol)
{
printf("calling mock socket\n");
return sock_rval;
}
然后在另一个文件中进行测试:
测试套接字.c:
extern int sock_rval;
int get_socket();
int main()
{
sock_rval = -1;
int rval = get_socket();
assert(rval == -1);
sock_rval = 3;
int rval = get_socket();
assert(rval == 3);
return 0;
}
然后,您将编译这三个模块并将其链接在一起。然后get_socket
将调用socket
使用mock_socket.c中的函数代替库函数。
该技术不仅适用于套接字函数,而且适用于一般的系统/库函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)