我有这样一个方法:
public boolean isFree(LdapPort port) {
boolean result = false;
try{
ServerSocket ss = new ServerSocket(port.getPortNumber());
ss.getLocalPort();
ss.close();
} catch(IOException ex){
result = true;
}
return result;
}
问题是,getLocalPort()
在真实系统端口上运行,并且在测试期间它是否通过取决于本地系统。
测试这种方法的有效方法应该是什么?
最佳答案
ServerSocket
实例应该可以通过工厂获得,(工厂)是passed as a dependency到你的类(class):
// Passing factory dependency via constructor injection
public PortChecker(IServerSocketFactory socketFactory)
{
this.socketFactory = socketFactory;
}
// ...
ServerSocket ss = this.socketFactory.GetServerSocket(port.getPortNumber());
ss.getLocalPort();
ss.close();
然后,在你的单元测试中你可以mock socketFactory
返回假的 服务器套接字,并因此“断开”它与任何真实世界系统的连接。
请注意,ServerSocket
可能也需要抽象(例如,由接口(interface)/基类表示),以便它也可以被模拟。
关于java - 使用 ServerSocket 类对方法进行单元测试的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16511642/