В настоящее время я занимаюсь разработкой веб-службы 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'