안녕하세요 저는 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이고 Pageable
은 page=0
및 size=20
으로 설정하기 때문에 기본값을 사용한다고 추측합니다. 나는 TestRestTemplate
클래스에서 .exchange(...)
, .getForEntity(...)
및 .getForObject(...)
메서드를 사용했지만 아무도 쿼리 매개 변수와 함께 작동하지 않는 것처럼 보였습니다. 누군가 나를 도와달라고 전화를 걸었습니다. 내가 잘못한 것일 수도 있습니다. 정말 고맙습니다.
을 도울 수
은 다음 link 몇 가지 예에서 찾아주세요 : 그것은 무언가 같이해야한다 ? filters'? – Tuco
'/ api/v1/admin? page = {page} & size = {size} & filters = {filters}'와 같이 올바른 것으로 표시 할 수 있도록 답변을 업데이트 할 수 있습니까? – Tuco
위대한, 내 대답을 업데이트했습니다. 확인해 주셔서 감사합니다 :) – ervidio