Mockito не возвращает ожидаемое значение - PullRequest
0 голосов
/ 06 марта 2019

Я создал модульный тест для функции, но когда дело доходит до поиска объекта из 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"));
}

1 Ответ

0 голосов
/ 06 марта 2019

Мне кажется, я решил свой вопрос:

Вместо этого:

return createDTO(taskRepository.save(task));

Я должен написать это:

taskRepository.save(task);
return createDTO(task);

Теперь он прошел тест

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...