簡體   English   中英

測試 Spring MVC 響應模式(忽略響應中項目中的 json 字段)

[英]Test Spring MVC response pattern (Ignore a json field in the items in the response )

我正在測試一個 spring MVC 應用程序。
我需要確保對瀏覽器的響應具有特定模式,我的應用程序發回一些 json,並且對於每個 Json 項目都有一個我不想比較的名為 DT_RowId 的字段,因為 DT_RowId 包含一個隨機數。 因此,我想比較所有 Json 主體,除了 DT_RowId 及其內容。
順便說一句,DT_RowId 的典型出現是“DT_RowId”:“8407709537703772”。 典型的 json 響應是:

{"id":-1,"fieldErrors":[],"aaData":[{"id":8002,"firstname":"Bob","lastname":"Jones","email":"bob.jones@gmail.com","DT_RowId":"8407709537703772"},{"id":8002,"firstname:"Dan","lastname":"Jones","email":"dan.jones@gmail.com","DT_RowId":"8404309537701754"}]}

下面,我的測試:

@Test
public void testGetUsersJson() throws Exception {
    mockMvc.perform(get("/users")
        .accept(MediaType.APPLICATION_JSON))

        .andDo(print())

        .andExpect(content().contentType("application/json"))
        // How can I modify the line below??
        .andExpect(content().bytes(IOUtils.toByteArray(ctx.getResource("classpath:responses/users.getUsersJson.mywebapp.response.json").getInputStream())))
        .andExpect(status().isOk())
        .andExpect(redirectedUrl(null))
        .andExpect(forwardedUrl(null));
}

如何修改上面的代碼? 我想比較除字段“DT_RowId”之外的所有 Json 響應。 有什么聰明的主意嗎?

您可以使用andExpect(content()。matches(regex here)),並編寫一個正則表達式來匹配您的users.getUsersJson.mywebapp.response.json內容(不包括DT_RowId)。

如果您願意向您的項目添加額外的依賴項,這可以使用JsonUnit Spring MVC 集成和格式化您的 JSON 來實現,如下所示

{
    "id": -1,
    "fieldErrors": [],
    "aaData": [
        {
            "id": 8002,
            "firstname": "Bob",
            "lastname": "Jones",
            "email": "bob.jones@gmail.com",
            "DT_RowId": "${json-unit.any-number}"
        },
        {
            "id": 8002,
            "firstname": "Dan",
            "lastname": "Jones",
            "email": "dan.jones@gmail.com",
            "DT_RowId": "${json-unit.any-number}"
        }
    ]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM