【问题标题】:java.lang.AssertionError: Got a list of values But instead of the expected single valuejava.lang.AssertionError:得到一个值列表但不是预期的单个值
【发布时间】:2020-08-22 18:11:07
【问题描述】:

在 Spring Boot 应用程序上实现 java 单元测试用例。

当我使用 java 单元测试框架 Junit 5 匹配我的预期数据和实际数据时出现此错误。

这是我实现的代码,

    @Test
    public void testListAddress() throws Exception {

        listAddress.add(new Address(1L, "road 89", "Dhaka", "Manikgonj1", "1800"));
        listAddress.add(new Address(2L, "road 88", "Dhaka1", "Manikgonj2", "1801"));

        Mockito.when(addressServiceImpl.findAllAddresses()).thenReturn(listAddress);
        String url = "/api/v1/address";
        MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get(url);
        ResultMatcher ok = MockMvcResultMatchers.status().isOk();
        final ObjectMapper objectMapper = new ObjectMapper();

        String expectedJsonResponse = objectMapper.writeValueAsString(listAddress);

        ResultActions mvcResult = (ResultActions) this.mockMvc.perform(builder).andExpect(ok)
                .andExpect(MockMvcResultMatchers.jsonPath("$.data").value(expectedJsonResponse));

    }

我的端点结果如下:

{ 
"status":true,
"message":"Address record lists!!",
"data":[
       {"id":1,"street":"road 89","city":"Dhaka","state":"Manikgonj1","zip":"1800"}, 
       {"id":2,"street":"road 88","city":"Dhaka1","state":"Manikgonj2","zip":"1801"}
    ]
}

堆栈跟踪:

   java.lang.AssertionError: Got a list of values

    [{"id":1,"street":"road 89","city":"Dhaka","state":"Manikgonj1","zip":"1800"},{"id":2,"street":"road 88","city":"Dhaka1","state":"Manikgonj2","zip":"1801"}]

     instead of the expected single value

     [{"id":1,"street":"road 89","city":"Dhaka","state":"Manikgonj1","zip":"1800"},{"id":2,"street":"road 88","city":"Dhaka1","state":"Manikgonj2","zip":"1801"}]

【问题讨论】:

    标签: java spring-boot jackson mockito junit5


    【解决方案1】:

    你可以这样做:

    import net.minidev.json.JSONObject;
    import net.minidev.json.parser.JSONParser;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    ...
    
    listAddress.add(new Address(1L, "road 89", "Dhaka", "Manikgonj1", "1800"));
    listAddress.add(new Address(2L, "road 88", "Dhaka1", "Manikgonj2", "1801"));
    
    JSONParser jsonParser= new JSONParser(JSONParser.DEFAULT_PERMISSIVE_MODE);
    ObjectMapper objectMapper = new ObjectMapper();
    
    JSONArray listJson = (JSONArray) jsonParser.parse(objectMapper.writeValueAsString(listAddress));
    
    ResultActions mvcResult = (ResultActions) this
    .mockMvc
    .perform(builder)
    .andExpect(ok)
    .andExpect(MockMvcResultMatchers.jsonPath("$.data").value(Matchers.containsInAnyOrder(listJson.toArray())));
    

    【讨论】:

      猜你喜欢
      • 2021-08-22
      • 2021-03-27
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 2022-12-05
      • 2012-07-21
      • 2023-04-08
      相关资源
      最近更新 更多