2010-11-18 3 views
11

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

Например:

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")); 

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

+0

и вопрос есть? – Bozho

ответ

21

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

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"); 

http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html#doReturn%28java.lang.Object%29

+1

Спасибо за подробный ответ, включая 'doReturn()'. ('doThrow()' в этом случае не требуется, за исключением последовательности.) – David

2
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() 
    } 
}); 

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

2

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

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"); 
Смежные вопросы