У меня была проблема с насмешливым клиентом Apache Http.Следующая попытка создать макет:
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)
Почему вызываетсявыполнить внутри Mockito. при переходе к AbstractHttpClient?
Я нашел решение этой конкретной проблемы: используйте интерфейс HttpClient вместо попытки смоделировать конкретный подкласс.В этом случае это гораздо лучшее решение, но мне интересно, что здесь вообще происходит?Почему я не могу издеваться над этим конкретным классом с помощью Mockito?Есть ли что-то особенное в DefaultHttpClient?Есть ли другие случаи, когда Mockito не может издеваться над конкретными классами?
Я использую Mockito 1.8.5, Apache httpclient 4.0.3, Apache http core 4.1, JDK 1.6.0 в OSX