Я вижу несколько потенциальных проблем:
Во-первых, вы звоните
List<Employe> listemp=employeService.findAllEmployeActive();
в getEmployeDTOList()
вашего контроллера, но ваш макет Mockito записывается как:
when(employeService.findAll()).thenReturn(employes)
Итак, ваш тест может не работать просто потому, что ваша имитация никогда не происходит.
Во-вторых, вы не высмеяли ModelMapper
, который вы автоматически подключили в контроллере.Я думаю, Spring все равно продолжит и заберет этот компонент для вас (кто-то поправит меня, если я ошибаюсь), но в любом случае не рекомендуется, чтобы ваши модульные тесты зависели от внешних библиотек, так как выдолжны касаться только функциональности контроллера.Было бы лучше посмеяться над ModelMapper
, чтобы он "всегда" работал, и написать отдельные тесты для проверки ваших сопоставлений.
Я пошел дальше и создал свою собственную версию вашего кода для проверки.Я изменил hasSize
на 2, потому что вы использовали только два элемента в вашем примере.
Этот тест работает для меня:
@RunWith(SpringJUnit4ClassRunner.class)
public class EmployeeControllerTest {
private MockMvc mockMvc;
@InjectMocks
private EmployeeController employeeController ;
@Mock
private EmployeeService employeeService;
@Mock
private ModelMapper modelMapper;
@Before
public void setUp() throws Exception{
MockitoAnnotations.initMocks(this);
mockMvc=MockMvcBuilders.standaloneSetup(employeeController).build();
}
@Test
public void testgetAllEmployeeWithModelMapper() throws Exception{
Employee emp1 = new Employee("Hamza", "Khadhri", "hamza1007", "123");
Employee emp2 = new Employee("Oussema", "smi", "oussama", "1234");
List<Employee> Employees= Arrays.asList(emp1, emp2);
EmployeeDTO dto1 = new EmployeeDTO("Hamza", "Khadhri", "hamza1007", "123");
EmployeeDTO dto2 = new EmployeeDTO("Oussema", "smi", "oussama", "1234");
when(modelMapper.map(emp1,EmployeeDTO.class)).thenReturn(dto1);
when(modelMapper.map(emp2,EmployeeDTO.class)).thenReturn(dto2);
when(employeeService.findAll()).thenReturn(Employees);
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("Hamza")))
.andExpect(jsonPath("$[0].prenom", is("Khadhri")))
.andExpect(jsonPath("$[0].login", is("hamza1007")))
.andExpect(jsonPath("$[0].mp", is("123")))
.andExpect(jsonPath("$[1].nom", is("Oussema")))
.andExpect(jsonPath("$[1].prenom", is("smi")))
.andExpect(jsonPath("$[1].login", is("oussama")))
.andExpect(jsonPath("$[1].mp", is("1234")));
verify(employeeService,times(1)).findAll();
verifyNoMoreInteractions(employeeService);
}
}
Как видите, я создаю свои собственные объекты DTO и передаю их обратно, так что modelMapper
всегда будет вести себя так, как ожидалось для этого модульного теста.