我正在为名为 pkg_getclient () 的函数编写一个测试单元。
基本上,它是一个无限期监听客户端的函数。
这是实现:http://slexy.org/view/s21RBuOUOu (粘贴在那里以保持问题文本大小合理)
以下是客户端-服务器测试的示例:http://slexy.org/view/s2fS5hBkgI
这是我的单元测试的当前状态:
int test_pkg_getclient (char* portname) {
int netfd;
struct pkg_conn *result;
netfd = pkg_permserver(portname, "tcp", 0, 0);
/* validate_port(port); */
printf("TESTING PKG_GETCLIENT...\n");
result = pkg_getclient(netfd,callbacks, NULL, 0);
printf("TESTING VALID FILE DESCRIPTOR\n");
if (result == PKC_ERROR) {printf ("\t[ FAILED ]\n");
} else { printf ("\t[ PASSED ]\n");
}
return 0;
}
int main (int argc, char* argv[]) {
test_pkg_getclient(argv[1]);
printf("%d",argc);
return 0;
}
我需要打破 pkg_getclient() 阻塞调用。 它还需要能够移植到 Windows,而不仅仅是基于 UNIX 的系统。 我无法修改 pkg_getclient() 函数。阻塞函数位于 getclient()内部。
有什么方法可以使用信号处理来打破阻塞调用吗? 或者还有其他办法解决这个问题吗?
最佳答案
老实说,我认为这并不真正符合单元测试的条件,因为您还涉及整个网络堆栈。
我建议采用不同的测试策略:更改代码以允许 Dependency Injection 。也就是说,应该可以在运行时将引用传递给网络堆栈以供使用。对于生产代码,您当然会使用真实的代码,但出于单元测试的目的,您可以使用模拟堆栈来实现覆盖您想要测试的内容所需的最小行为。
如果您希望将测试扩展到真实的网络堆栈(在这种情况下,我们处理集成而不是单元测试),我个人认为创建小程序并通过更高级别的脚本(bash、python 等)将它们粘合在一起更简单。
关于c - C 中的测试单元用于服务器监听功能。避免监听阻塞调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11645257/