如何使用自定义协议测试驱动网络应用程序?

时间:2009-11-05 15:49:31

标签: java unit-testing networking tdd integration-testing

我目前正在为学校项目开发两个Java网络应用程序。一个通过TCP,另一个通过UDP。在这两个方面我都要实现简单的自定义协议。

即使我正在努力,我找不到如何正确测试此类应用的方法,或者更好地开发测试优先开发

如果我有一个客户端而且我想要真正的测试而没有将所有内容都删除,我必须实现具有模拟行为的服务器,如果像这样的简单应用程序几乎是整个项目。我明白,当一些大的东西,比写几行Perl脚本来测试它可能真的有帮助。

现在我正在同时开发服务器和客户端,这样我至少可以手动测试,但这似乎不是一种干净的开发方式。唯一有帮助的是通过记录器隧道连接,这样我就可以看到所有经过的数据(使用针对IDEA的TunneliJ插件)。

使用自定义协议TDD网络应用程序的最佳方法是什么?我应该把所有东西都收尾干净吗?

3 个答案:

答案 0 :(得分:3)

将协议与网络层分开。一旦您可以提供自己的数据,就可以更轻松地测试协议的逻辑,而无需通过网络堆栈。即使您没有使用Python,我也建议您查看Twisted框架的结构。这是如何对网络应用程序进行单元测试的一个很好的例子。

答案 1 :(得分:2)

前一段时间我们遇到了同样的问题。我们认为让两个开发人员完成任务更简单:一个用于编写服务器,另一个用于编写客户端。我们开始在同一个办公室工作,以便我们可以更轻松地编码,测试,修改和重复。

总而言之,我认为这对我们来说是最好的解决方案。它使我们能够在不理想的条件下实际测试程序。例如,我们的互联网出了几次,我们的程序崩溃了,所以我们修复了它。它对我们来说效果很好,但如果您是唯一的开发人员,它可能不适合您。

无论您做什么,在编写自定义协议时,我都会检查Wireshark以监控您的网络流量,以确保所有数据包都正确无误。

答案 2 :(得分:2)

在我的应用中,我有这样的代码

    m_socket.receive(packet);

    doSomething(packet);

我模拟了接收,因此可以锻炼做某事()需要做的事情。

这对你来说有什么影响?在这里,您真正单元测试您的代码行为正确,您还可以模拟套接字发送,并根据您的协议预期应该发送的内容。

我们当然没有真正测试协议的另一端是否满意。这是集成测试。我总是渴望尽快到达IT部门。当你与“另一端”互动时,你会发现有趣的东西。

你处于控制两端的运气状态,在那个位置我可能会花一些时间来制作合适的,可控制的测试装备。