Ожидается, что коллекция будет иметь размер 2, но размер коллекции будет равен 0?

Я пишу код для тестирования веб-службы с использованием mockito и junit, поэтому я столкнулся с проблемой в hasSize (2), я ввел контроллер и вызвал метод findAll, который возвращает список Employe, но ошибка сохраняется, в В режиме отладки он сообщает мне, что коллекция пуста, однако это не так. ошибка:

java.lang.AssertionError: Путь JSON "$" Ожидается: коллекция с размером ‹2>, но: размер коллекции был ‹0>

вот класс:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class GestionPointage3ApplicationTests {

        private MockMvc mockMvc;
        @InjectMocks
        private EmployeController employeeController ; 
        @Mock
        private EmployeService 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{
            Employe emp1 = new Employe("Hamza", "Khadhri", "hamza1007", "123");
            Employe emp2 = new Employe("Oussema", "smi", "oussama", "1234");
            List<Employe> Employees= Arrays.asList(emp1, emp2);

            EmployeDTO dto1 = new EmployeDTO("Hamza", "Khadhri", "hamza1007", "123");
            EmployeDTO dto2 = new EmployeDTO("Oussema", "smi", "oussama", "1234");
            //when(modelMapper.map(emp1,EmployeDTO.class)).thenReturn(dto1);
           // when(modelMapper.map(emp2,EmployeDTO.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);

        }

    }

и это Контроллер:

@CrossOrigin(origins = "*", allowedHeaders = "*")
@RestController
@RequestMapping("/employe")
public class EmployeController {

    @Autowired
    private EmployeService employeService;

    @Autowired
    private ModelMapper modelMapper;

    @GetMapping("/dto")
    public List<Employe> findAll() throws Exception{
    return employeService.findAllEmployeActive(); 
    }   
}

подпись метода:

public List<Employe>findAll() throws Exception;     
public List<Employe>findAllEmployeActive() throws Exception;

Ошибки StackTrace:

java.lang.AssertionError: Ожидаемый статус: ‹200>, но был: ‹500> в org.springframework.test.util.AssertionErrors.fail (AssertionErrors.java:55) в org.springframework.test.util.AssertionErrors.assertEquals ( AssertionErrors.java:82) в org.springframework.test.web.servlet.result.StatusResultMatchers.lambda $ matcher $ 9 (StatusResultMatchers.java:619) в org.springframework.test.web.servlet.MockMvc $ 1.andvcpect. java: 178) в com.cynapsys.pointage.GestionPointage3ApplicationTests.testgetAllEmployeeWithModelMapper (GestionPointage3ApplicationTests.java:66) в sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Source) в sun.Model.invoke0 (Native Source). DelegatingMethodAccessorImpl.invoke (Неизвестный источник) в java.lang.reflect.Method.invoke (Неизвестный источник) в org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall (FrameworkMethod.java:50) в org.runit.in. модель.ReflectiveCallable.ru n (ReflectiveCallable.java:12) в org.junit.runners.model.FrameworkMethod.invokeExplosively (FrameworkMethod.java:47) в org.junit.internal.runners.statements.InvokeMethod.evaluate (InvokeMethod. orjava:17hod) в .springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate (RunBeforeTestExecutionCallbacks.java:73) в org.springframework.test.context.junit4.statements.RunAfterTallback.java: .runners.statements.RunBefores.evaluate (RunBefores.java:26) в org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate (RunBeforeTestMethodCallbacks.java:75) в ..


person Hamza Khadhri    schedule 03.04.2019    source источник


Ответы (1)


Вы издеваетесь над EmployeeService и говорите имитируемому экземпляру вернуть список Employee (с двумя его элементами) при вызове метода findAll():

when(employeeService.findAll()).thenReturn(Employees)

Но в EmployeeController вы фактически вызываете другой метод на EmployeeService:

return employeService.findAllEmployeActive()

Итак, вы должны обновить свое фиктивное ожидание следующим образом:

when(employeeService.findAllEmployeActive()).thenReturn(Employees)
person glytching    schedule 03.04.2019
comment
Я изменил его, но это изменение ошибки ti ожидал 200, но ошибка 500 - person Hamza Khadhri; 04.04.2019
comment
@HamzaKhadhri, можете ли вы обновить свой вопрос, чтобы включить трассировку стека для этой ошибки 500, а также включить сигнатуры методов для employeService.findAllEmployeActive() и employeService.findAll() - person glytching; 04.04.2019
comment
Вы добавили трассировку стека из тестовой ошибки, то есть неудачного утверждения. Я ищу трассировку стека 500 Internal Server Error, выданную вашим фиктивным сервером. - person glytching; 04.04.2019
comment
Не удалось написать HTTP-сообщение: org.springframework.http.converter.HttpMessageNotWritableException: не удалось записать JSON: (было java.lang.NullPointerException); вложенное исключение - com.fasterxml.jackson.databind.JsonMappingException: (было java.lang.NullPointerException) (через цепочку ссылок: java.util.Arrays $ ArrayList [0] - ›com.cynapsys.pointage.model.Employe [actif] ) - person Hamza Khadhri; 04.04.2019