Код, который я тестирую, работает правильно, журналы правильные.Mockito - Не удалось инициализировать Spy на HttpEntity
Тесты по ошибке: ConnectorTest: Не удалось инициализировать @Spy аннотированный поле 'объект'.
- Почему я не могу использовать проверить на HTTP лица?
- Есть ли лучший способ проверить его? Должен ли я следить за журналами в противном случае?
КЛАСС быть испытанным:
public class Connector {
private static final String hostname = "localhost";
private int varnishPort = 8000;
private int connectionTimeout = 5000; //millis
private int requestTimeout = 5000;
private int socketTimeout = 5000;
private final HttpHost host;
private HttpClient httpClient;
private HttpEntity entity;
private HttpResponse response;
public Connector(){
host = new HttpHost(this.hostname, this.varnishPort);
RequestConfig.Builder requestBuilder = RequestConfig.custom();
requestBuilder = requestBuilder.setConnectTimeout(connectionTimeout);
requestBuilder = requestBuilder.setConnectionRequestTimeout(requestTimeout);
requestBuilder = requestBuilder.setSocketTimeout(socketTimeout);
HttpClientBuilder builder = HttpClientBuilder.create();
builder.setDefaultRequestConfig(requestBuilder.build());
httpClient = builder.build();
}
public void invalidateVarnishCache(String level, String idDb) {
try{
String xPurgeRegex = level+"/"+idDb+"$";
Header header = new BasicHeader("X-Purge-Regex", xPurgeRegex);
BasicHttpRequest purgeRequest = new BasicHttpRequest("PURGE", "/");
purgeRequest.setHeader(header);
response = httpClient.execute(host, purgeRequest);
entity = response.getEntity();
int statusCode = response.getStatusLine().getStatusCode();
if(statusCode >= 300){
int respLength = entity.getContent().available();
byte[] errorResp = new byte[ respLength ];
entity.getContent().read(errorResp, 0, respLength);
// log error
}else{
// log success
}
EntityUtils.consume(entity);
}catch(Exception e){
// log exception
}
}
}
MY TEST:
@RunWith(MockitoJUnitRunner.class)
public class ConnectorTest {
@Mock
private HttpClient httpClient;
// @Spy
// private HttpEntity entity;
@InjectMocks
private Connector varnishPurger = new Connector();
@Test
public void purgeFail() throws Exception{
HttpResponse response500 = new BasicHttpResponse(new ProtocolVersion("HTTP/1.1", 0, 0), 500, "NO!_TEST");
HttpEntity entity500 = new StringEntity("BAD entity. [test]");
response500.setEntity(entity500);
doReturn(response500)
.when(httpClient).execute(isA(HttpHost.class), isA(BasicHttpRequest.class));
varnishPurger.invalidateVarnishCache("level_test_500", "id_test_500");
// verify(entity, times(1)).getContent().available(); // HOW DO I MAKE THIS WORK?
}
...
}
HttpEntity приведен, вероятно, интерфейс, поэтому шпионить было бы бессмысленно (как интерфейс не делает ничего). Извините, если это так. См. Http://docs.mockito.googlecode.com/hg/1.9.5/org/mockito/Spy.html для вещей, которые Mockito не может заглядывать автоматически (вы могли бы поставить там реализующий класс, например, через 'private HttpEntity entity = новый MyEntityImpl(); ', который должен работать) –
Пожалуйста, избегайте документации кода Google и используйте ссылки doc из github;) => http://site.mockito.org/mockito/docs/1.10.19/org/mockito/ Mockito.html – Brice