2017-10-23 8 views
1

안녕하세요 저는 TestRestTemplate을 사용하여 코드 통합 테스트를 구현하고 있으며 끝점을 테스트하는 동안 쿼리 매개 변수를 포함 할 방법을 찾을 수 없습니다.쿼리 매개 변수를 TestRestTemplate에 전달합니다.

@Test 
@DisplayName("Test list all filtered by boolean field") 
void testListAllBooleanFilter() { 
    Map<String, String> params = new HashMap<>(); 
    params.put("page", "0"); 
    params.put("size", "5"); 
    params.put("filters", "active=true"); 
    ResponseEntity<AdminDTO[]> response = this.testRestTemplate.getForEntity("/api/v1/admin", AdminDTO[].class, 
      params); 
    assertThat(response.getBody()).isNotNull(); 
    assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); 
    assertThat(response.getBody()).hasSize(2); 
    assertThat(response.getBody()[0].getActive()).isTrue(); 
    assertThat(response.getBody()[1].getActive()).isTrue(); 
} 

@Test 
@DisplayName("Test list all with empty result") 
void testListAllEmptyResult() { 
    HttpEntity<String> requestEntity = new HttpEntity<>(new HttpHeaders()); 
    Map<String, String> params = new HashMap<>(); 
    params.put("page", "0"); 
    params.put("size", "5"); 
    params.put("filters", "active=false"); 
    ResponseEntity<List> response = this.testRestTemplate.exchange("/api/v1/admin", HttpMethod.GET, 
      requestEntity, List.class, params); 
    assertThat(response.getBody()).isNotNull(); 
    assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); 
    assertThat(response.getBody()).isEmpty(); 
} 

그리고 여기 테스트 해요 컨트롤러의 :

여기에 내가 해봤이 개 다른 테스트는 기본적으로

@GetMapping(value = "/admin", produces = "application/json") 
public ResponseEntity listAll(String filters, Pageable pageable) { 
    if(filters == null) { 
     filters = "type=" + ADMIN.toString(); 
    } else { 
     filters += ",type=" + ADMIN.toString(); 
    } 
    Condition condition = filterMapService.mapFilterToCondition("user_account", filters); 
    List<AdminDTO> adminAccounts = userAccountRepository.findAllByFilter(condition, pageable); 
    if (adminAccounts.isEmpty()) { 
     return new ResponseEntity<>(adminAccounts, HttpStatus.OK); 
    } 
    return new ResponseEntity<>(adminAccounts, HttpStatus.OK); 
} 

내가 요청이 엔드 포인트에 도달 할 때마다 코드를 디버깅 할 때 테스트를 통해 보냈던 params는 여하튼 비어있어서 필터는 null이고 Pageablepage=0size=20으로 설정하기 때문에 기본값을 사용한다고 추측합니다. 나는 TestRestTemplate 클래스에서 .exchange(...), .getForEntity(...).getForObject(...) 메서드를 사용했지만 아무도 쿼리 매개 변수와 함께 작동하지 않는 것처럼 보였습니다. 누군가 나를 도와달라고 전화를 걸었습니다. 내가 잘못한 것일 수도 있습니다. 정말 고맙습니다.

답변

1

귀하의 문제는 귀하가 귀하의 URL에 매개 변수를 포함하지 않는다는 것입니다. ??를 PARAMS는`/ API/V1/관리자 페이지 크기가 같아야 경우에도 단지의 경우 그것은 당신에게

+0

을 도울 수

/api/v1/admin?page={page}&size={size}&filters={filters} 

은 다음 link 몇 가지 예에서 찾아주세요 : 그것은 무언가 같이해야한다 ? filters'? – Tuco

+1

'/ api/v1/admin? page = {page} & size = {size} & filters = {filters}'와 같이 올바른 것으로 표시 할 수 있도록 답변을 업데이트 할 수 있습니까? – Tuco

+0

위대한, 내 대답을 업데이트했습니다. 확인해 주셔서 감사합니다 :) – ervidio