Ваши ожидания не совпадают с кодом, который вы написали getForEntity
не возвращает HttpStatus
экземпляр, вместо этого он возвращает ResponseEntity<String>
. Сравнение ResponseEntity<String>
с HttpStatus
никогда не даст равных.
Фиксированная версия вашего теста:
@Test
public void getForEntity() throws URISyntaxException {
URI testUri = new URI(testUrl);
ArgumentCaptor<URI> argument = ArgumentCaptor.forClass(URI.class);
doReturn(new ResponseEntity<>("ResponseString", HttpStatus.OK))
.when(restTemplate).getForEntity(any(URI.class), eq(String.class));
assertThat(restTemplate.getForEntity(testUri, String.class).getStatusCode(),
CoreMatchers.is(HttpStatus.OK));
verify(restTemplate).getForEntity(argument.capture(), eq(String.class));
assertThat(argument.getValue(), CoreMatchers.is(testUri));
}
Примечание: тест на самом деле не тестирует getForEntity
, он проверяет, что java-прокси, созданный с помощью mockito, возвращает поддельный результат. Imho, вы на самом деле тестируете, работает ли фиктивная инфраструктура ...
doReturn(new ResponseEntity<>("ResponseString", HttpStatus.OK)).when(restTemplate).getForEntity(any(URI.class), eq(String.class));
Как обсуждалось в комментариях, интеграционный тест RestTemplate
может быть:
package com.example.demo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import java.io.IOException;
import java.net.URI;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
public class RetryRestTemplateTest {
private final MockWebServer server = new MockWebServer();
@BeforeEach
public void setup() throws IOException {
server.start();
}
@AfterEach
public void teardown() throws IOException {
server.close();
}
@Test
public void getForEntity() {
URI testUri = server.url("/").uri();
server.enqueue(new MockResponse().setResponseCode(200).setBody("{}"));
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> forEntity = restTemplate.getForEntity(testUri, String.class);
assertThat(forEntity.getStatusCode(), is(HttpStatus.OK));
assertThat(forEntity.getBody(), is("{}"));
}
}
Следующеенеобходимы тестовые зависимости:
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>mockwebserver</artifactId>
<version>4.2.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.2.2</version>
<scope>test</scope>
</dependency>