Mockito тестировние void метода

744
04 января 2017, 02:16

Тестируемый метод

public boolean delete(Long id) {
    Message message = messageRepository.findOne(id);
    if (message == null) {
        throw  new DataNotFoundException("Data with id=" + id + " not found.");
    }
    messageRepository.delete(id);
    return true;
}

Тест:

@Test
public void delete() throws Exception {
    //prepare
    MessageServiceImp spy = spy(new MessageServiceImp(messageRepository));
    messageServiceImp.save(MESSAGE); //создаю объект, пробовал и не создавать результат одинаков
    doReturn(true).when(spy).delete(ID);
    //testing
    boolean testMessage = messageServiceImp.delete(ID);
    //validate
    verify(messageRepository).delete(ID);
}

Тест не проходит получаю:

.exception.DataNotFoundException: Data with id=1 not found.

Что делаю не так?

Answer 1

Вот мой вариант.

Тестируемый метод

public boolean delete(Long id) {
    // проверку на существование и пр. должен делать MessageRepository
    return messageRepository.delete(id);
}

Тест

private static final Long ID = 123;
// интерфейс, а не реализация
private MessageRepository messageRepository;
@Test
public void detele_delegateToRepository() throws Exception {
    // подготовка
    messageRepository = mock(MessageRepository.class);
    // не знаю как у вас класс называется - будем считать Subject
    Subject subject = new Subject(messageRepository);
    // действие
    subject.delete(ID);
    // проверка
    verify(messageRepository).delete(ID);
}

Это все что вам надо тестировать. Остальные тесты должны быть у класса который реализует MessageRepository.

READ ALSO
Передача аргументов методу

Передача аргументов методу

При передаче объекта в качестве параметра методу ссылка должна копироватьсяТогда почему вывод 0 9 9, а не 9 9 9? Получается, s1 и s2 ссылаются на разные...

574
Как правильно организовать экспорт в Excel в Spring-MVC

Как правильно организовать экспорт в Excel в Spring-MVC

Добрый деньЕсть контроллер в котором есть метод поиска

475
Пример запроса Twitter Api android

Пример запроса Twitter Api android

Не могу найти ни один пример запроса Twitter Api androidЕсли кто может - предоставьте пример выполнения такого запроса в android

617
MouseListener в Java

MouseListener в Java

Как отловить события mousePressed и mouseReleased где в этот момент находится курсор, а потом получить объект над которым это событие происходит? Можно...

567