2017-01-31 2 views
0

Ich habe eine java.lang.AssertionError, wenn ich versuchte, die href zu überprüfen. Die Antwort Körper sieht gut aus,java.lang.AssertionError bei der Ausführung der Komponententest

MockHttpServletResponse: 
      Status = 200 
    Error message = null 
      Headers = {Content-Type=[application/json;charset=UTF-8]} 
    Content type = application/json;charset=UTF-8 
      Body = {"itemName":"ThinkPad","links":[{"rel":"self","href":"http://localhost/items/001"}]} 
    Forwarded URL = null 
    Redirected URL = null 
      Cookies = [] 

aber, wenn dieser Satz genannt: andExpect(jsonPath("$.links[0].href", hasItem(endsWith("/items/001"))))

Der Fehler ist aufgetreten:

java.lang.AssertionError: JSON path "$.links[0].href" 
Expected: a collection containing "" 
    but: was "http://localhost/items/001" 

    at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20) 
    at org.springframework.test.util.JsonPathExpectationsHelper.assertValue(JsonPathExpectationsHelper.java:74) 
    at org.springframework.test.web.servlet.result.JsonPathResultMatchers$1.match(JsonPathResultMatchers.java:86) 
    at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:171) 
    at scnz.api.controller.ItemDispatchControllerTest.getCurrentStock(ItemDispatchControllerTest.java:62) 

Hier ist der Testcode:

@Test 
    public void getCurrentStock() throws Exception { 
     Item item = new Item("001", "ThinkPad"); 
     when(service.retrieve("001")).thenReturn(item); 

     mockMvc.perform(get("/items/001")) 
       .andDo(print()) 
       .andExpect(jsonPath("$.itemName", is(item.getItemName()))) 
       .andExpect(jsonPath("$.links[0].href", hasItem(endsWith("/items/001")))) 
       .andExpect(status().isOk()); 

Kann jemand herauszufinden, wo ist falsch?

+0

Warum haben Sie diesen Mockito markiert? Sie scheinen es nicht zu benutzen. –

Antwort

0

Das tatsächliche Ergebnis von jsonPath(...) für "$ .links [0] .href" ist nur ein String wie im AssertionError angegeben.

Das erwartete Ergebnis für hasItem(...) ist eine Auflistung wie im AssertionError angegeben.

In Ihrem Fall verwenden Sie einfach endsWith(...) withouch hasItem(...). Wenn Ihr Ausdruck für jsonPath(...) eine Sammlung (z. B. über "$ .links [*]. Href") anstelle eines einzelnen Elements zurückgibt, sollten Sie hasItem(...) verwenden.

+0

Jus geändert zu "undExpect (jsonPath (" $. Links [0] .href ", CoreMatchers.endsWith ("/items/001 ")))", und es funktioniert. – Frank

Verwandte Themen