2017-10-23 5 views
1

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!

Antwort

1

Ihr Problem besteht darin, dass Sie die Parameter in Ihrer URL nicht einschließen. Es sollte etwas sein wie:

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

Bitte, finden in den folgenden link einige Beispiele für den Fall, kann es Ihnen

+0

sogar helfen, wenn die params wie '/ api/v1/admin Seitengröße sein sollte? "Filter"? – Tuco

+1

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

+0

Toll, ich habe meine Antwort aktualisiert. Danke für deine Bestätigung :) – ervidio

Verwandte Themen