我在为函数pkg_getclient()写一个测试单元。 它基本上是一个为客户端不定时监听的函数。
这里是实现:http://slexy.org/view/s21RBuOUOu(贴有保留的问题文本大小合理)C中用于服务器监听功能的测试单元。避免监听阻止呼叫
这里是一个客户端的一个例子 - 服务器测试: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()中的阻止函数是。
有没有办法使用信号处理来打破阻塞呼叫? 或者还有其他解决方法吗?
我不能/不应该改变我测试的结构,所以我不能使用非阻塞套接字。我可能会看看选择 – pAndrei 2012-07-25 08:45:05
仍然没有找到解决呼叫阻塞的解决方案 – pAndrei 2012-08-03 09:04:07
@pAndrei:您可以做的最好的方法是使用警报(2)设置超时并为SIGALRM安装信号处理程序。这将(当计时器触发时)调用信号处理程序,中断阻塞系统调用。这将允许您的测试代码再次获得控制权,这是一种策略,可能仅用于使您的单元测试在超过时间限制时失败(尽管SquareRootOfTwentyThree表示这太大而无法称为单元测试)。 – Giel 2012-08-03 20:38:07