JSON路径$ [0] .nom没有值?

时间:2019-02-06 10:17:19

标签: json spring-boot junit mockito hamcrest

我目前正在开发一个REST API Web服务,因此我必须使用单元测试来对其进行测试,因此我无法弄清楚如何使用Mockito和Junit来使用Spring测试RESTFul API,首先我已经在我用@Before和@Test创建了两个方法,当我进入调试模式时,控件“ getEmployeDTOList”中的方法始终返回null,因此控制台向我显示Exception NullPointerException。

EmployeControllerTest类:

@RunWith(SpringJUnit4ClassRunner.class)
public class EmployeControllerTest {

    private MockMvc mockMvc;
    @InjectMocks
    private EmployeController employeController ; 
    @Mock
    private EmployeService employeService ;
    @Mock
     IConverter converterDto ; 

    @Before
    public void setUp() throws Exception{
        MockitoAnnotations.initMocks(this);
        mockMvc=MockMvcBuilders.standaloneSetup(employeController).build();
    }
    @Test
    public void testgetAllEmployee() throws Exception{
        List<Employe> employes= Arrays.asList(

                new Employe("BOUROUNIA", "HICHEM", "h.bourounia", "9dfd1be37de137f146ca990310a1483c",true)
                ,new Employe("BRADAI", "ALI", "a.bradai", "830ddf1b7e8e34261f49d20e5e549338",true) );
            when(employeService.findAll()).thenReturn(employes);
            mockMvc.perform(get("/employe/dto"))
            .andExpect(status().isOk())
            .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE))
            .andExpect(jsonPath("$", hasSize(2)))
         .andExpect(jsonPath("$[0].nom", is("BOUROUNIA")))
         .andExpect(jsonPath("$[0].prenom", is("HICHEM")))
         .andExpect(jsonPath("$[0].login", is("h.bourounia")))
         .andExpect(jsonPath("$[0].mp", is("9dfd1be37de137f146ca990310a1483c")))
         .andExpect(jsonPath("$[0].actif", is(true)))
         .andExpect(jsonPath("$[1].nom", is("BRADAI")))
         .andExpect(jsonPath("$[1].prenom", is("ALI")))
         .andExpect(jsonPath("$[1].login", is("a.bradai")))
         .andExpect(jsonPath("$[1].mp", is("830ddf1b7e8e34261f49d20e5e549338")))
         .andExpect(jsonPath("$[1].actif", is(true))).andReturn().getResponse().getContentAsString();

        verify(employeService,times(1)).findAll();
        verifyNoMoreInteractions(employeService);        
}
    }

这是Employecontroller:

@CrossOrigin(origins = "*", allowedHeaders = "*")
@RestController
@RequestMapping("/employe")
public class EmployeController {
@GetMapping("/dto")
public List<EmployeDTO > getEmployeDTOList(){
    try {
        List<Employe> listemp=employeService.findAll();


        return  listemp.stream()
            .filter(Objects::nonNull)
            .map(emp ->converterDTO.convertToDto(emp))
            .collect(Collectors.toList());


    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
} 
}

我得到的错误:

  

java.lang.AssertionError:JSON路径“ $ [0] .id”上没有值:   com.jayway.jsonpath.PathNotFoundException:期望找到一个对象   在路径$ [0]中具有属性['id'],但发现为'null'。这不是json   根据的对象   JsonProvider:'com.jayway.jsonpath.spi.json.JsonSmartJsonProvider'

1 个答案:

答案 0 :(得分:0)

我也是休息api Web服务和单元测试的新手。根据我的经验,jsonPath应该不是jsonPath("$.employes[0].mp")而不是jsonPath("$[0].mp"). 原因在于,由于它返回的是ArrayList,因此必须指示保存数据的对象。 我使用的语法是$.ArrayListName[elementPosition].columnName