java - 最佳实践 : Unit testing a method that takes in a Socket as an argument?

标签 java unit-testing sockets

我尝试对一类方法进行单元测试,这些方法接受它们都读取和写入的 Socket 对象。我想知道,解决这个问题的最佳方法是什么?我在一个团队中工作(这是一个大学项目),并且只负责这个(java)类,因此完全重构代码并不是真正的选择。

是否有任何类型的模拟套接字可用,例如“Mocket”或其他东西?您将如何解决这个问题?

正如我所提到的,我是一名大学生,所以我期待从论坛的智慧中学习。感谢您抽出宝贵的时间来回答。

最佳答案

为了使您的代码可测试,依赖于 Socket 的类应该依赖于套接字的抽象 - 例如,公开您使用的方法(例如读取和写入)的简单接口(interface)。您的应用程序将使用真正的 Socket 类的包装器,但在单元测试中您将能够使用模拟(请检查 JMock )。

考虑:

public interface ISocket
{
    byte[] read();
    int write(byte[] content);
}

public class SocketWrapper : ISocket
{
    // read and write methods simply delegate work to real socket
}

public class ClassToTest
{
    private ISocket socket;

    public ClassToTest(ISocket socket)
    {
        this.socket = socket;
    }
}

现在,在单元测试中,您可以创建 ISocket 的模拟并将其传递给 ClassToTest 构造函数。这样,您就可以将单元测试与其依赖项隔离开来。

关于java - 最佳实践 : Unit testing a method that takes in a Socket as an argument?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10366957/

相关文章:

unit-testing - ReSharper 单元测试无限期悬而未决

c# - 高性能套接字上的异步等待与线程池与多线程(C10k 解决方案?)

Java - Mule UDP 丢包

java - 接收整数序列的服务器

Java - 如何测量超时

java - 这是最常见的情况吗?

java - Maven 命令 "mvn clean jetty:run"和其他 mvn 命令在 Eclipse 中不起作用

c# - 在 ASP.MVC 中测试具有相同名称的 Controller 中的 GET/POST 方法

c - 在 Subversion 中使用 Tessy

Java套接字客户端连接和断开问题