Java 为网络相关类编写单元测试

Java 为网络相关类编写单元测试,java,unit-testing,networking,junit,Java,Unit Testing,Networking,Junit,我有一个班级负责网络通讯。我想对它进行单元测试 为了编写测试,我必须实现与之通信的服务器,但这反过来又需要自己的测试 如何为这样的类编写测试?除非您编写的是低级驱动程序,否则您的类无疑依赖于其他类来进行实际通信。在这种情况下,如果这些类不容易被模仿,我将使用依赖注入来提供它们周围的类或包装器。在测试中,您将提供所依赖的类的模拟版本(如果无法模拟实际类,则提供包装器)。验证您提供的模拟上的方法是否调用了具有正确参数的正确方法。确保您有足够的单元测试来满足自己的要求,即您已经涵盖了真实依赖项的所有行

我有一个班级负责网络通讯。我想对它进行单元测试

为了编写测试,我必须实现与之通信的服务器,但这反过来又需要自己的测试


如何为这样的类编写测试?

除非您编写的是低级驱动程序,否则您的类无疑依赖于其他类来进行实际通信。在这种情况下,如果这些类不容易被模仿,我将使用依赖注入来提供它们周围的类或包装器。在测试中,您将提供所依赖的类的模拟版本(如果无法模拟实际类,则提供包装器)。验证您提供的模拟上的方法是否调用了具有正确参数的正确方法。确保您有足够的单元测试来满足自己的要求,即您已经涵盖了真实依赖项的所有行为。这将满足您的单元测试

您还需要一些集成测试。不幸的是,最简单的方法可能是开发一个完整的模拟服务器与之通信。请注意,您的模拟服务器只需要实现接口,而不需要实现另一端的实际代码。提供一些额外的方法,允许您为集成测试设置服务器,以便模拟服务器出现预期的行为。

如果您正在对负责网络通信的类进行单元测试,那么您只能测试通信是否正确。因此,提供一个模拟(比如,一个虚拟)服务器,让它与之通信。您可以使用许多模拟库,如EasyMock和jMockit。如果您想测试与实际服务器的实际通信,那么这就是集成测试。当然,单元测试的确切定义因开发人员而异