ApacheHttpクライアントのモックに問題がありました。モックを作成する次の試み:
DefaultHttpClient httpClient = Mockito.mock(DefaultHttpClient.class);
真のモックを作成できません。上記の行は例外なく実行されますが、いくつかの動作をスタブしようとすると、次のようになります。
Mockito.when(httpClient.execute(Mockito.<HttpUriRequest>anyObject())).thenReturn(null);
AbstractHttpClientのメソッドから例外が発生します。
Exception in thread "main" java.lang.IllegalArgumentException: Request must not be null.
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:572)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)
AbstractHttpClientに渡されたときに、Mockito.in内で実行する呼び出しが行われるのはなぜですか?
この特定の問題の解決策を見つけました。具体的なサブクラスをモックする代わりに、インターフェイスHttpClientを使用してください。この場合、これははるかに優れた解決策ですが、一般的にここで何が起こっているのでしょうか。この具象クラスをMockitoで適切にモックできないのはなぜですか?DefaultHttpClientについて何か特別なことはありますか?Mockitoが具象クラスをモックできない他のケースはありますか?
OSXでMockito1.8.5、Apache httpclient 4.0.3、Apache http core 4.1、JDK1.6.0を使用しています