Стабилинг по умолчанию в Мокито - PullRequest
14 голосов
/ 18 ноября 2010

Как я могу заглушить метод, чтобы при задании значения, которого я не ожидал, он возвращал значение по умолчанию?

Например:

Map<String, String> map = mock(Map.class);
when(map.get("abcd")).thenReturn("defg");
when(map.get("defg")).thenReturn("ghij");
when(map.get(anyString())).thenReturn("I don't know that string");

Часть 2: Как указано вышено выдает исключение:

Map<String, String> map = mock(Map.class);
when(map.get("abcd")).thenReturn("defg");
when(map.get("defg")).thenReturn("ghij");
when(map.get(anyString())).thenThrow(new IllegalArgumentException("I don't know that string"));

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

Ответы [ 3 ]

25 голосов
/ 20 ноября 2010

Лучшее решение, которое я нашел, - это изменить порядок заглушек:

Map<String, String> map = mock(Map.class);
when(map.get(anyString())).thenReturn("I don't know that string");
when(map.get("abcd")).thenReturn("defg");
when(map.get("defg")).thenReturn("ghij");

Когда по умолчанию выбрасывается исключение, вы можете просто использовать doThrow и doReturn

doThrow(new RuntimeException()).when(map).get(anyString());
doReturn("defg").when(map).get("abcd");
doReturn("ghij").when(map).get("defg");

https://static.javadoc.io/org.mockito/mockito-core/2.18.3/org/mockito/Mockito.html#12

2 голосов
/ 03 июня 2015

Вы можете использовать:

Map<String, String> map = mock(Map.class, new Returns("I don't know that string"));
when(map.get("abcd")).thenReturn("defg");
when(map.get("defg")).thenReturn("ghij");
2 голосов
/ 18 ноября 2010
when(map.get(anyString())).thenAnswer(new Answer<String>() {
    public String answer(Invocation invocation) {
        String arg = (String) invocation.getArguments()[0];
        if (args.equals("abcd")
             return "defg";
        // etc.
        else
             return "default";
             // or throw new Exception()
    }
});

Это своего рода окольный способ сделать это.Но это должно работать.

...