如何在C中集成测试网络应用程序

时间:2008-12-03 18:58:23

标签: c unit-testing integration-testing

在网络代码方面,我从未设法以任何优雅或自动的方式从单元测试转向集成测试。

所以我的问题是:给定一个简单的基于单线程客户端/服务器的网络应用程序,您将如何将客户端和服务器集成到您当前最喜欢的测试套件中(我目前使用{{ 3}})。

我当然愿意改变单元测试套件以实现我的目标。

编辑:虽然我很欣赏这些答案,但我更多地寻找将集成测试集成到我的单元测试框架中的神奇方法(如果可能的话)。就像 fork ()或者可以应用某些东西而不会产生太多副作用一样。

3 个答案:

答案 0 :(得分:4)

另一种方法是使用虚拟服务器和虚拟客户端模拟两端,只发送您要测试的消息并验证响应是否符合预期。这些模拟服务器真的非常愚蠢:它们只需要读/写套接字并转储预先设置的数据。如果它很容易解析,你可以通过模拟请求中数据的响应来稍微提高它们。

这里的胜利是你确切地知道被模拟物品将要做什么(包括假超时,发送垃圾,无论你想要什么)。

使用Perl或Python套接字库来构建模拟服务器和客户端可能非常容易;如果您使用Perl,您应该能够使用CPAN中非常强大的Test ::类来帮助实现“做这项工作”和报告。

答案 1 :(得分:1)

netcat是测试网络服务器和客户端的绝佳工具。

man netcatnetcat是TCP / IP瑞士军刀。拥有netcat和Victorinox瑞士军刀的经验,我可以向你保证netcat比Victorinox好得多 - 我宁愿将它与莱克斯曼进行比较。

答案 2 :(得分:0)

我们构建我们的应用程序,以便核心代码在库中,并且可执行文件是从main.c(在我们的例子中是真正的main.cxx)生成的,它只是一个启动服务器或客户端的非常薄的包装器。这使我们可以设置测试套件,可以在proc中实例化一个完整的服务器和客户端,并使用他们的常规网络协议进行相互通信的测试。它运作得很好。

如果你不能用这种方式构建东西,你可以使用fork / CreateProcess启动你常用的服务器可执行文件,然后让测试中的客户端代码与外部服务器通信。