我有一个使用套接字的函数,我想模拟它,但我找不到如何去做。
有没有办法在 C 中模拟套接字?
谢谢
最佳答案
大部分系统/库函数都是weak symbols .这意味着您可以创建自己的实现来覆盖现有版本。然后,您可以在单元测试时使用这些函数。
假设您要测试以下功能:
源文件:
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;
}
然后在另一个文件中进行测试:
test_socket.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
会调用mock_socket.c中的socket
函数,而不是库函数。
此技术不仅适用于套接字函数,而且通常适用于系统/库函数。
关于c - 如何在 C 中模拟套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44073243/