Нет значения в JSON-пути $ [0] .nom? - PullRequest
0 голосов
/ 06 февраля 2019

В настоящее время я занимаюсь разработкой веб-службы rest api, и мне нужно протестировать их с помощью модульного тестирования, поэтому я не могу понять, как протестировать RESTFul API с помощью Spring с использованием Mockito и Junit, во-первых, я подготовил класс вкоторый я создал два метода с @Before и @Test, когда я включил режим отладки, метод в контроле "getEmployeDTOList" всегда возвращает ноль, поэтому консоль показывает мне исключение 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: Ожидается, что найден объект со свойством ['id'] в пути $ [0], но найдено 'null'.Согласно JsonProvider, это не объект json: 'com.jayway.jsonpath.spi.json.JsonSmartJsonProvider'

1 Ответ

0 голосов
/ 25 июня 2019

Я также новичок в остальных веб-сервисах API и модульном тестировании.Исходя из моего опыта, jsonPath не должен быть jsonPath("$.employes[0].mp"), а не jsonPath("$[0].mp").. Причина в том, что, поскольку он возвращает ArrayList, вы должны указывать объект, содержащий данные.Синтаксис, который я использую: $.ArrayListName[elementPosition].columnName.

...