Использовать ли сеттер после создания через @InjectMocks?
Разрабатываю модульный тест для метода create. Решаю не мокать employeeModelMapper. Насколько правильно задать его значение через setEmployeeModelMapper? Может быть есть более корректные/стабильные для тестирования способы? Например обходиться без @InjectMocks
Контроллер
@RestController
@RequestMapping("/employee")
@AllArgsConstructor
@Setter
public class EmployeeController {
private EmployeeService employeeService;
private ModelMapper employeeModelMapper;
@PostMapping
public ResponseEntity<Object> create(@RequestBody EmployeeDTO employeeDTO) {
var employee = employeeModelMapper.map(employeeDTO, Employee.class);
employeeService.save(employee);
return ResponseEntity
.created(new URI("/employee/" + employee.getId()))
.build();
}
}
Тест
@ExtendWith(MockitoExtension.class)
class EmployeeControllerTest {
@Mock
private EmployeeService employeeService;
@InjectMocks
private EmployeeController employeeController;
@Test
public void givenEmployeeDTO_whenCreateEmployee_thenReturnIsCreated(){
// given
employeeController.setEmployeeModelMapper(new ModelMapper());
var employeeId = 0;
var employeeDTO = EmployeeDTO.builder()
.id(employeeId)
.build();
// when
var result = employeeController.create(employeeDTO;
// then
assertThat(result.getStatusCode()).isEqualTo(HttpStatus.CREATED);
var location = result.getHeaders().getLocation();
assertThat(location).isNotNull();
assertThat(location.getPath()).isEqualTo("/employee/" + employeeId);
}
}