Hacer uso de RestTemplate si eres un Desarrollador Spring debe ser algo muy común. Pero como asegurar que las llamadas realizadas son correctas?

Haciendo uso de RestTemplate haremos una llamada a un servicio externo con el método getForEntity, podemos hacer uso de getForObject pero getForEntity nos retorna un ResponseEntity el cual nos permite manipular el response a nuestro gusto.

En el siguiente ejemplo (haciendo uso de Spring Boot), hacemos una llamada a la URL http://localhost:8090/token.

@Component
public class ThirdPartyClient {

	private final RestTemplate restTemplate;

	public ThirdPartyClient(RestTemplateBuilder restTemplateBuilder) {
		this.restTemplate = restTemplateBuilder.build();
	}

	public String getToken() {
		ResponseEntity<String> response = this.restTemplate.getForEntity("http://localhost:8090/token", String.class);
		if (response.getStatusCode().is2xxSuccessful()) {
			return response.getBody();
		}
		return null;
	}

}

Qué sigue? Asegurar que la implementación realizada funcione, es decir, hacer una llamada a la URL en mención y obtener un token. Haciendo uso de la infraestructura que provee Spring Boot escribimos el siguiente test.

@RunWith(SpringRunner.class)
@RestClientTest(ThirdPartyClient.class)
public class ThirdPartyClientTest {

  @Autowired
  private ThirdPartyClient client;

  @Autowired
  private MockRestServiceServer server;

  @Test
  public void contextLoads() {
    String token = UUID.randomUUID().toString();

    this.server.expect(requestTo("http://localhost:8090/token"))
        .andExpect(method(HttpMethod.GET))
        .andRespond(withSuccess(token, MediaType.TEXT_PLAIN));

    assertThat(this.client.getToken()).isEqualTo(token);

    this.server.verify();
  }

}

MockRestServiceServer ha estado dentro de las librerias de spring-test desde la versión 3.2. Gracias a la anotación RestClientTest que se provee por Spring Boot tenemos toda la infraestructura necesaria para poder hacer pruebas de nuestro ThirdPartyClient creado anteriormente. Como podemos ver no es necesario crear una instancia de MockRestServiceServer ya que RestClientTest lo provee por nosotros. Luego sigue revisar la configuraciòn de las expectativas del servicio en la cual se define la URL, el método HTTP y en este caso la respuesta es de éxito.

De esta manera, no necesitamos iniciar un servicio, ocupar un puerto y hacer una llamada real.


Eddú Meléndez

Java Software Engineer, Open Source Contributor