При попытке проверить post () остальную конечную точку см .: json не может быть нулевым или пустым - PullRequest
0 голосов
/ 27 апреля 2020

Если я пытаюсь проверить конечную точку post (), я вижу:

java .lang.AssertionError: Нет значения в JSON path "$ .firstName"

Причина by: java .lang.IllegalArgumentException: json не может быть нулевым или пустым

Но с тестом для get () все работает нормально. И в postTest () результат для статуса правильный. Где моя ошибка? Это правильный способ проверить контроллер покоя в этом стиле?

@RunWith(MockitoJUnitRunner.Silent.class)
public class Temp {
    private final Employee successfullyRegisteredEmployee = new Employee(2L, "Iven");
    private final Employee employeeGetById = new Employee(2L, "Iven");


    @Mock
    private EmployeeServiceImpl serviceMock;

    private MockMvc mockMvc;

    @Before
    public void setUp() throws Exception {
        mockMvc = MockMvcBuilders.standaloneSetup(new EmployeeControllerImpl( serviceMock))
                .build();
    }


    @Test
    public void getTest() throws Exception {
        when(serviceMock.getEmployee(2L)).thenReturn(employeeGetById);

        mockMvc.perform(get("/employee/get/2"))
                .andExpect(status().is(200))
                .andExpect(content().json(("{'firstName':'Iven'}")));

        verify(serviceMock).getEmployee(2L);
    }



    @Test
    public void postTest() throws Exception {
        String json = "{\n" +
                "  \"firstName\": \"Iven\"\n" 
                "}";
        when(serviceMock.register(employeeForRegister)).thenReturn(successfullyRegisteredEmployee);

        mockMvc.perform( MockMvcRequestBuilders
                .post("/employee/register")
                .content(json)
                .contentType(MediaType.APPLICATION_JSON)
                .accept(MediaType.APPLICATION_JSON))
                .andExpect(status().is(201))
                .andExpect(jsonPath("$.firstName", Matchers.is("Iven")));

    }
}

@RestController
@RequestMapping("/employee")
public class EmployeeControllerImpl implements EmployeeController {
    private final EmployeeService service;

    public EmployeeControllerImpl(EmployeeService service) {
        this.service = service;
    }

    @PostMapping(path = "/register",
            consumes = "application/json",
            produces = "application/json"
    )
    public ResponseEntity<Employee> registerEmployee(@Valid @RequestBody Employee employee) {
        Employee registeredEmployee = service.register(employee);
        return ResponseEntity.status(201).body(registeredEmployee);
    }
}

1 Ответ

1 голос
/ 29 апреля 2020

Кажется, проблема может быть с when(serviceMock.register(employeeForRegister)).thenReturn(successfullyRegisteredEmployee);.

Вы пытались установить точку останова на return ResponseEntity.status(201).body(registeredEmployee);, чтобы проверить, заполнен ли зарегистрированный работник? Если он пуст, попробуйте заменить mock на when(serviceMock.register(any())).thenReturn(successfullyRegisteredEmployee);, и если он работает, это означает, что либо метод equals() не переопределен для Employee, либо сравнение просто не удаётся.

...