Как проверить блокировку попыток в Mockito? - PullRequest
2 голосов
/ 14 июля 2020

Я пробовал много разных вещей из Inte rnet, но не нашел никого, кто обрабатывает исключения, пытается поймать блоки только с Mockito. Вот код, который я пытаюсь протестировать:

public void add() throws IOException {
        try {
            userDAO.insert(user);
            externalContext.redirect("users.xhtml");
        } catch (final DuplicateEmailException e) {
            final FacesMessage msg = new FacesMessage(
                    "Die E-Mail Adresse wird bereits verwendet.");
            facesContext.addMessage(emailInput.getClientId(), msg);
        } catch (final UserAlreadyInsertedException e) {
            throw new IllegalStateException(e);
        }
    }

, а затем вот как я пытаюсь проверить его прямо сейчас:

@Test
    public void addTest() throws IOException, UserAlreadyInsertedException, DuplicateEmailException {
        User user = mock(User.class);
        doNothing().when(userDAO).insert(user);
        doNothing().when(externalContext).redirect(anyString());
        doNothing().when(facesContext).addMessage(anyString(),any());
        try{
            initMirror();
            userAddBean.add();
            verify(userDAO, times(1)).insert(user);
            verify(externalContext, times(1)).redirect(anyString());
        }
        catch (DuplicateEmailException e){
            verify(facesContext,times(1)).addMessage(anyString(),any());
        }
        catch (UserAlreadyInsertedException e){
            doThrow(IllegalStateException.class);
        }

    }

Я почти уверен, что особенно последняя часть, в которой я пытаюсь поймать и выбросить исключение, неверна, но я действительно не могу найти хорошего учебника по этому поводу.

Заранее спасибо за любую помощь :)

1 Ответ

0 голосов
/ 15 июля 2020

Вам нужно написать отдельные тестовые примеры для DuplicateEmailException и UserAlreadyInsertedException. Будет хорошо, если у вас есть один тестовый пример для положительного сценария.

Первый тест для DuplicateEmailException

@Test
public void addTestForDuplicateEmailException() throws IOException, UserAlreadyInsertedException, DuplicateEmailException {
    User user = mock(User.class);
    doNothing().when(externalContext).redirect(anyString());
    doNothing().when(facesContext).addMessage(anyString(),any());
        
    Mockito.when(userDAO.insert(Mockito.any(User.class))).thenThrow(new DuplicateEmailException());
       
    initMirror();
    userAddBean.add();
    verify(userDAO, times(1)).insert(user);
    verify(externalContext, times(1)).redirect(anyString());   
}

Второй тест для UserAlreadyInsertedException

@Test
public void addTestForUserAlreadyInsertedException() throws IOException, UserAlreadyInsertedException, DuplicateEmailException {
    User user = mock(User.class);
    doNothing().when(externalContext).redirect(anyString());
    doNothing().when(facesContext).addMessage(anyString(),any());
        
    Mockito.when(userDAO.insert(Mockito.any(User.class))).thenThrow(new UserAlreadyInsertedException());
       
    initMirror();
    userAddBean.add();
    verify(userDAO, times(1)).insert(user);
    verify(externalContext, times(0)).redirect(anyString());   
}
...