1

To implemented java unit test case on spring boot Applications.

I am getting this error when i matched my expected data and actual data using java unit test framework Junit 5.

Here is my implemented code,

    @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));

    }

My endpoint results are like:

{ 
"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"}
    ]
}

stack trace:

   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"}]

1 Answers1

1

You can do something like this:

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())));