2009-11-05 41 views
1

我目前正在为学校项目开发两个Java网络应用程序。一个通过TCP,另一个通过UDP。在这两个我都必须实现简单的自定义协议。如何使用自定义协议测试网络应用程序?

即使我很努力,我无法找到一种方法来正确测试这种应用程序,或更好地开发与测试第一次开发

如果我有一个客户,我想真正的考验没有磕碰所有的东西,我要实现服务器模拟行为,这在简单的应用,这些的情况下,几乎是整个项目。我明白,当写一些很大的东西时,比写几行Perl脚本来测试它真的有帮助。

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

TDD与自定义协议的网络应用程序的最佳方式是什么?我应该把所有东西都存下来,并对它好吗?

回答

3

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

+2

松耦合永远是答案:) – Olivier 2009-11-05 16:50:19

2

我们刚刚解决了同样的问题。我们认为让两个开发人员完成这项任务会更简单:一个写服务器,一个写客户端。我们开始在同一个办公室工作,以便我们可以更轻松地进行编码,测试,修改和重复。

总而言之,我认为这对我们来说是最好的解决方案。它给了我们在没有理想条件下真正测试程序的能力。例如,我们的互联网出去了几次,我们的程序崩溃了,所以我们修复了它。它对我们来说效果不错,但如果你是一个独立的开发者,它可能不是你的解决方案。

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

2

在我的应用我有如下代码

m_socket.receive(packet); 

    doSomething(packet); 

我嘲笑了那DoSomething的()需要做接收,因此可以行使的一切。

这是哪里为你打破?在这里你真的是单元测试你的代码的行为是否正确,你也可以模拟套接字发送,并且期望你认为应该根据你的协议发送什么。

我们当然不会测试协议的另一端是否快乐。这是集成测试。尽快进入IT后,我总是非常渴望。当你与“另一端”互动时,你会发现有趣的东西。

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