Поддерживает ли Mockito создание исключений в операторах then (Ответ), за которыми следуют операторы thenReturn? - PullRequest
1 голос
/ 28 июня 2019

У меня есть ситуация, когда это выглядит как вызов when (). ThenReturn () вызывает исключение, которое было определено в операторе when (). Then ().

Этот тест проходит:

@Test()
public void myTest() {
    List<String> list = mock(List.class);

    when(list.contains(any(String.class))).thenReturn(false);
    when(list.contains("A")).thenReturn(true);

    when(list.get(any(Integer.class))).then(new Answer(){
        @Override
        public Object answer(InvocationOnMock invocation) throws Throwable {
            return invocation.getArguments()[0].toString();
        }
    });
    when(list.get(0)).thenReturn("A");

    assertTrue(list.contains("A"));
    assertFalse(list.contains("B"));
    assertEquals("A", list.get(0));
    assertEquals("1", list.get(1));
}

Этот тест выдает исключение MyException (с сообщением «0 выходит за границы массива») в последней строке:

@Test()
public void myTest2() {
    List<String> list = mock(List.class);

    when(list.contains(any(String.class))).thenReturn(false);
    when(list.contains("A")).thenReturn(true);

    when(list.get(any(Integer.class))).then(new Answer(){
        @Override
        public Object answer(InvocationOnMock invocation) throws Throwable {
            throw new MyException((int)invocation.getArguments()[0]);
        }
    });
    when(list.get(0)).thenReturn("A");
}

class MyException extends RuntimeException{
    public MyException(int i){
        super(i + " is outside array bounds");
    }
}

Я обошел эту проблему, поместив всю логику в оператор when (). Then (), но задавался вопросом, является ли это ожидаемым поведением?

Моя зависимость:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-all</artifactId>
    <version>1.10.19</version>
</dependency>

Edit:

Такое поведение объясняется ссылкой @second в комментариях.

Как Mockito обрабатывает перекрывающиеся совпадения с несколькими аргументами в блоке thenReturn

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