2017-10-09 70 views
0

我试图验证Spring MVC webservice返回的JSON结果中的LocalDate对象,但我无法弄清楚方法。使用Spring MockMVC验证JSON响应中的LocalDate

此时,我总会遇到这样的断言错误类似以下:

java.lang.AssertionError: JSON path "$[0].startDate" Expected: is <2017-01-01> but: was <[2017,1,1]>

我测试的重要组成部分,是贴在下面。任何想法如何解决测试通过?

import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup; 

public class WebserviceTest { 

    @Mock 
    private Service service; 

    @InjectMocks 
    private Webservice webservice; 

    private MockMvc mockMvc; 

    @Before 
    public void before() { 
     mockMvc = standaloneSetup(webservice).build(); 
    } 

    @Test 
    public void testLocalDate() throws Exception { 
     // prepare service mock to return a valid result (left out) 

     mockMvc.perform(get("/data/2017")).andExpect(status().isOk()) 
      .andExpect(jsonPath("$[0].startDate", is(LocalDate.of(2017, 1, 1)))); 
    } 
} 

WebService的返回视图对象的寻找像这样的列表:

public class ViewObject { 

    @JsonProperty 
    private LocalDate startDate; 
} 

[编辑]

另一种尝试是

.andExpect(jsonPath("$[0].startDate", is(new int[] { 2017, 1, 1 }))) 

这就造成了

java.lang.AssertionError: JSON path "$[0].startDate" Expected: is [<2017>, <1>, <1>] but: was <[2017,1,1]>

[编辑2] 返回的startDate对象似乎是类型:net.minidev.json.JSONArray

回答

0

这是要走的路。由于“阿密特ķBIST”点我在正确的方向

... 
.andExpect(jsonPath("$[0].startDate[0]", is(2017))) 
.andExpect(jsonPath("$[0].startDate[1]", is(1))) 
.andExpect(jsonPath("$[0].startDate[2]", is(1))) 
0

我认为,在这一水平要验证JSON的不是分析对象。所以你有一个字符串,而不是LocalDate。

所以基本上尝试改变你的代码:

... 
.andExpect(jsonPath("$[0].startDate", is("2017-01-01")))); 
+0

这导致到java.lang.AssertionError:JSON路径“$ [0] .startDate” 预计:是“2017年1月1日” 但是:是<[2017,1,1]> – GreenTurtle

1

LOCALDATE的在JSON响应会像 “的startDate”:

"startDate": { 
    "year": 2017, 
    "month": "JANUARY", 
    "dayOfMonth": 1, 
    "dayOfWeek": "SUNDAY", 
    "era": "CE", 
    "dayOfYear": 1, 
    "leapYear": false, 
    "monthValue": 1, 
    "chronology": { 
     "id": "ISO", 
     "calendarType": "iso8601" 
    } 
} 

所以,你应该检查类似下面的每个属性:

.andExpect(jsonPath("$[0].startDate.year", is(2017))) 
       .andExpect(jsonPath("$[0].startDate.dayOfMonth", is(1))) 
       .andExpect(jsonPath("$[0].startDate.dayOfYear", is(1))) 
+0

我没有意识到你使用jsr310,所以以上只适用于非jsr310 localdate –

+0

对不起:java.lang.AssertionError:JSON路径中没有值“$ [0] .startDate.year”,异常:预期在路径$ [0] ['startDate']中找到属性['year']的对象,但找到'net.minidev.json.JSONArray'。根据JsonProvider,这不是一个json对象:'com.jayway.jsonpath.spi.json.JsonSmartJsonProvider'。 – GreenTurtle

+0

感谢您指点我正确的方向。 +1 – GreenTurtle