我正在寻找测试内部向预定义的URL发出HTTP请求的类的最佳方法。一般来说,有问题的类看起来或多或少是这样的:如何对内部使用HttpURLConnection的类进行单元测试?
public class ServiceAccess {
private static final String SERVICE_URL = "http://someservice.com/";
public ServiceAccess(String username) throws IOException,
UserNotFoundException, MalformedURLException {
URL url = new URL(SERVICE_URL + username);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
if(conn.getResponseCode() == HTTP_NOT_FOUND) {
throw new UserNotFoundException("user not found : " + username);
}
// and some more checks
}
}
我想考该类正确反应到HTTP服务器的响应,包括响应代码,头字段,并且这样的。我发现mockwebserver库看起来就像我需要的东西。但是,为了使用它,我需要以某种方式更改类连接到的URL。
我看到的唯一明智的选择是在构造函数中传递URL:但是,在设计方面,这看起来不太好,因为要求客户端将URL传递给这样的类看起来很腥。此外,我还没有看到任何其他Web服务访问库(Twitter4J,RestFB),这些库需要他们的客户端传递URL以便实际使用它们。
我不是Java专家,但我想尽可能地把它弄清楚。欢迎所有的答案。
这里有几个要点。有单元测试,并有集成测试。对于单元测试,您正在测试ServiceAccess类而不是HttpURLConnection - 其他人已经/应该已经测试过这个类。对于单元测试,你可以/应该嘲笑那个类,它为你提供能力测试,确切地说明从模拟对象所做的任何调用返回的结果。对于集成测试,您正在测试ServiceAccess如何与HttpURLConnection类以及任何其他类一起工作。拥有该网址的属性是很好的设计 - 依赖注入! – mikemil