2016-05-05 22 views
0

HttpURLConnection & URLオブジェクトをモックすることは可能ですか?私の制約は、私がPowerMockitoを使用するとは思わないということです。私はMockitoを使うことができますが、最終的なクラスであるため、MockitoはURLを嘲笑することはできないと言います。PowerMockitoを使用しないJavaでのURLオブジェクトの模擬

public static int getResponseCode(String urlString) 
     throws MalformedURLException, IOException 
{ 
    URL u = new URL(urlString); 
    HttpURLConnection huc = (HttpURLConnection)u.openConnection(); 
    huc.setRequestMethod("GET"); 
    huc.connect(); 
    return huc.getResponseCode(); 
} 

答えて

0

あなたはURLをラップして、デフォルトの代表者によって、実際のURLの実装にそのメソッドの呼び出しラッパークラスを作成することができ、この

final URLConnection mockUrlCon = mock(URLConnection.class); 

ByteArrayInputStream is = new ByteArrayInputStream(
     "<myList></myList>".getBytes("UTF-8")); 
doReturn(is).when(mockUrlCon).getInputStream(); 

//make getLastModified() return first 10, then 11 
when(mockUrlCon.getLastModified()).thenReturn((Long)10L, (Long)11L); 

URLStreamHandler stubUrlHandler = new URLStreamHandler() { 
    @Override 
    protected URLConnection openConnection(URL u) throws IOException { 
     return mockUrlCon; 
    }    
}; 
URL url = new URL("foo", "bar", 99, "/foobar", stubUrlHandler); 
doReturn(url).when(mockClassloader).getResource("pseudo-xml-path"); 
+0

URLConnectionとURLStreamHandlerとは何ですか? – Ashley

1

で試してみてください。

例:

public class URLWrapper { 
    private URL url; 

    public URLWrapper(String urlString) { 
     this.url = new URL(urlString); 
    } 

    public HttpURLConnection openConnection() { 
     return this.url.openConnection(); 
    } 

    //etc 
} 

今の代わりにURLを直接使用するのでは、あなたのクラスでURLWrapperを使用しています。 URLWrapperを簡単に嘲笑することができます。