Mockito casos de prueba para la unidad de entidad de respuesta al realizar la solicitud HTTP GET

Arika:

Estoy escribiendo casos de prueba de unidad para uno de mis métodos que realiza la petición GET (consulta al sistema externo), y recibe resultados de consulta, que almaceno en mi modelo de objetos, no soy capaz de burlarse de la plantilla de intercambio resto. Necesitar algo de ayuda con ella.

El siguiente código incluye también mi método y mi clase de prueba para el método.

public Car getCarModelDetails(String id) {
    HttpHeaders headers = new HttpHeaders();
    headers.set("Accept", APPLICATION_JSON);

    HttpEntity<String> entity = new HttpEntity<>("parameters", headers);
    ResponseEntity<QueryResultCar> exchange = restTemplate.exchange(
            config.restUrl + "/v" + config.restVersion + /query?q=SELECT + SELECT_COLUMNS
                    + " FROM Car WHERE (Model = '" + id + "')",
            HttpMethod.GET, entity, QueryResultCar.class);

    if (exchange.getStatusCode().equals(HttpStatus.OK)) {
        List<Car> records = exchange.getBody().records;
        if (records != null && records.size() == 1) {
            return records.get(0);
        } else (records == null || records.isEmpty()) {
            return null;
        } 

    } else {
        throw new RuntimeException();
    }
}


private static class QueryResultCar extends QueryResult<Car> {
}

  @Test
public void getCarModelDetails_valid() throws JSONException {   
    String id = null;
    HttpEntity<String> entity = new HttpEntity<>("parameters", headers);
     new ResponseEntity<>("", HttpStatus.OK);
    Mockito.when(restTemplate.exchange(config.restUrl + "/v" + config.restVersion + /query?q=SELECT + SELECT_COLUMNS
                    + " FROM Car WHERE (Model = '" + id + "'), HttpMethod.GET, entity, QueryResultCar.class))
            .thenReturn(response);  

}
DCTID:

Es necesario utilizar comparadores y probablemente necesita usar verificar y arg y captor a todas las cosas que quieres. Yo probablemente dividir esta prueba porque tiene muchas afirmaciones, pero esto debe empezar.

@RunWith(MockitoJUnitRunner.class)
public class SubjectTest {

@InjectMocks
private CarCar subject;
@Mock
private RestTemplate restTemplate;

@Test
public void getCarModelDetails_valid() throws JSONException {
    String id = "123";
    Config config = new Config();
    when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(QueryResultCar.class)))
            .thenReturn(new ResponseEntity<>(new QueryResultCar(), HttpStatus.OK));

    Car actual = subject.getCarModelDetails(id);

    ArgumentCaptor<HttpEntity> httpEntityArgumentCaptor = ArgumentCaptor.forClass(HttpEntity.class);
    verify(restTemplate).exchange(eq(config.restUrl + "/v" + config.restVersion + "/query?q=SELECT + SELECT_COLUMNS"
            + " FROM Car WHERE (Model = '" + id + "')"), eq(HttpMethod.GET), httpEntityArgumentCaptor.capture(), eq(QueryResultCar.class));
    assertEquals(APPLICATION_JSON_VALUE, httpEntityArgumentCaptor.getValue().getHeaders().get("Accept").get(0));
    assertEquals("Car to string", actual.toString());
}

}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=186256&siteId=1
Recomendado
Clasificación