Я создал модульный тест для функции, но когда дело доходит до поиска объекта из flatRepository, он возвращает:
me.flatkeepr.exception.ResourceNotFoundException: квартира 1 не найдена
в
me.flatkeepr.service.TaskService.lambda $ создать $ 2 (TaskService.java:54)
в java.base / java.util.Optional.orElseThrow (Optional.java:408) в
me.flatkeepr.service.TaskService.create (TaskService.java:54)
Как это должно работать?
Что я пробовал до сих пор:
- добавлена аннотация @Mock
- поместите MockitoAnnotations.initMocks (this) в функцию init
- поставить Optional.of в возвращаемое значение
@RunWith(MockitoJUnitRunner.class)
public class TaskServiceTest {
@Mock
private final TaskRepository taskRepository = Mockito.mock(TaskRepository.class);
@Mock
private final FlatRepository flatRepository = Mockito.mock(FlatRepository.class);
@Mock
private final UserRepository userRepository = Mockito.mock(UserRepository.class);
@InjectMocks
private TaskService taskService;
@Test
public void createTaskWithNoDeadLine() {
TaskDTO fresh = new TaskDTO();
fresh.setName("Clean up");
fresh.setScore(10);
fresh.setDescription("Short summary");
Flat flat = new Flat();
flat.setName("Flat");
Task task = TaskMapper.INSTANCE.convertToEntity(fresh);
task.setId(1L);
when(taskRepository.existsByNameAndFlatId(fresh.getName(), 1L)).thenReturn(false);
when(flatRepository.findById(1L)).thenReturn(Optional.of(flat));
when(taskRepository.save(task)).thenReturn(task);
TaskDTO actual = taskService.create(1L, fresh);
assertEquals("Clean up", actual.getName());
assertEquals(10, actual.getScore().intValue());
assertEquals("Short summary", actual.getDescription());
}
}
Функция в слое обслуживания:
public create(Long flatId, TaskDTO fresh) {
return flatRepository.findById(flatId).map(flat -> {
Task task = createEntity(fresh);
task.setId(null);
task.setFlat(flat);
return createDTO(taskRepository.save(task));
}).orElseThrow(() -> new ResourceNotFoundException("Flat " + flatId + " not found"));
}