4

当涉及到网络代码时,我从来没有以任何优雅或自动化的方式从单元测试转移到集成测试。

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

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

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

4

3 回答 3

4

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

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

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

于 2008-12-03T21:54:04.220 回答
1

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

man netcat说那netcat是 TCP/IP 瑞士军刀。拥有使用netcatVictorinox 瑞士军刀的经验,我可以向您保证,netcat它比 Victorinox 好得多 - 我宁愿将它与 Leatherman 进行比较。

于 2008-12-03T22:10:43.017 回答
0

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

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

于 2008-12-03T20:08:46.727 回答