我用Java开发了一个基本的聊天应用程序。它由一个服务器和多个客户端组成。服务器持续监视传入的消息,并将其广播到所有客户端。客户端由一个带有文本区域(用于由服务器和其他客户端发送的消息)、一个文本字段(用于发送文本消息)和一个按钮(发送)的Swing GUI组成。客户端还持续监视来自其他客户端的传入消息(通过服务器)。这是通过线程和事件侦听器实现的,应用程序按预期工作。
但是,我该如何对我的聊天应用进行单元测试呢?由于这些方法涉及与服务器建立连接以及从服务器发送/接收消息,因此我不确定是否应该对这些方法进行单元测试。根据我的理解,单元测试不应该用于连接到数据库或网络之类的任务。
我能想出的几个测试用例是:
1)文本字段的最大限制
2)客户端可以连接到服务器
3)服务器可以连接到客户端
4)客户端可以发送消息
5)客户端可以接收消息
6)服务器可以发送消息
7)服务器可以接收消息
8)服务器可以接受来自多个客户端的连接
但是,由于上面的大多数方法都涉及某种网络通信,所以我无法执行单元测试。我应该如何对我的聊天应用进行单元测试?
发布于 2010-04-26 23:49:53
您应该隔离测试服务器和客户端。
执行此操作的方法是使用mock objects模拟服务器(用于测试客户端)或客户端(用于测试服务器)。
模拟服务器将具有与真实服务器相同的方法,但您可以决定它们返回的内容,例如模拟连接错误、超时等。因为它是模拟的,所以您可以完全控制功能,而不必担心实际的连接错误。
对于Java,请看一下Mockito模拟框架。
发布于 2010-04-27 00:05:23
单元测试应该专注于执行您构建的每个类的公共API。然而,在处理Swing时,事情变得有点棘手。考虑使用swingUnit对Swing组件进行单元测试。
发布于 2010-04-27 03:10:12
Beautiful Testing的第7章介绍了如何测试XMPP chat client。我建议你读一下这一章。结论是说明性的,可能会为您的聊天应用程序提供一些提示:
为了创建用于检查
协议实现的漂亮测试,我们首先在最低层测试了简单的请求-响应协议:网络流发送的数据。在发现这种形式的测试不能很好地扩展后,我们将协议抽象到更高的级别,直到测试只使用高级数据结构。通过在高层次上测试协议行为,我们能够为更复杂的协议编写测试,而不会影响测试的清晰度。对于最复杂的协议,编写场景有助于覆盖协议会话中可能出现的所有可能情况。最后,由于XMPP是具有许多不同实现的开放协议,因此在真实网络上测试XMPP应用程序以确保与其他实现的互操作性非常重要。通过定期运行小型测试程序,我们能够对整个系统进行测试,并检查我们的协议实现是否与网络上的其他实体很好地结合在一起。
https://stackoverflow.com/questions/2714795
复制相似问题