Hallo Ich verwende TestRestTemplate, um einige Integrationstests für meinen Code zu implementieren, und beim Versuch, einen Endpunkt zu testen, kann ich keine Möglichkeit finden, die Abfrageparameter einzubeziehen.Übergeben von Abfrageparametern an TestRestTemplate
Hier gibt es 2 verschiedene Tests, die ich versucht habe:
@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();
}
Und hier ist der Controller-I-Tests bin:
@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);
}
Grundsätzlich, wenn ich Debuggen den Code, sobald die Anforderung den Endpunkt erreicht Die Parameter, die ich über den Test gesendet habe, sind irgendwie leer, daher ist der Filter null und Pageable
Ich nehme an, dass er Standardwerte verwendet, weil er sie auf page=0
und size=20
setzt. Ich versuchte mit den .exchange(...)
, .getForEntity(...)
und .getForObject(...)
Methoden aus der TestRestTemplate
Klasse, aber keine scheinen mit Abfrageparams arbeiten, könnte jemand bitte helfen Sie mir und tel mir, was ich falsch machen könnte, würde ich es wirklich zu schätzen wissen!
sogar helfen, wenn die params wie '/ api/v1/admin Seitengröße sein sollte? "Filter"? – Tuco
Es sollte so aussehen: '/ api/v1/admin? Page = {page} & size = {size} & filters = {filters}', könnten Sie Ihre Antwort aktualisieren, damit ich sie als richtig markieren kann? – Tuco
Toll, ich habe meine Antwort aktualisiert. Danke für deine Bestätigung :) – ervidio