【发布时间】:2017-10-23 14:58:01
【问题描述】:
您好,我正在使用 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);
}
基本上,当我调试代码时,每当请求到达端点时,我尝试通过测试发送的参数不知何故为空,因此过滤器为空,Pageable 我猜使用默认值,因为它将它们设置为page=0和size=20。我尝试使用TestRestTemplate 类中的.exchange(...)、.getForEntity(...) 和.getForObject(...) 方法,但似乎没有一个适用于查询参数,有人可以帮我解答一下我可能做错了什么吗?真的很感激!
【问题讨论】:
标签: java spring-boot integration-testing