我试图对一个方法类进行单元测试,这些方法接受一个它们都读写的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构造函数。这样,您就可以将单元测试与其依赖项隔离开来。

10-02 02:48