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