2010-11-18 5 views
11

Comment puis-je remplacer une méthode de telle sorte que, si une valeur ne m'attend pas, elle renvoie une valeur par défaut?Découper les valeurs par défaut dans Mockito

Par exemple:

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

Partie 2: Comme ci-dessus, mais jette une exception:

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

Dans les exemples ci-dessus, le dernier talon est prioritaire si la carte renvoie toujours la valeur par défaut.

+0

et la question est? – Bozho

Répondre

21

La meilleure solution que j'ai trouvé est d'inverser l'ordre des talons:

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

Lorsque la valeur par défaut est de lancer une exception, vous pouvez simplement utiliser doThrow et 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

Merci pour la réponse complète, y compris 'doReturn()'. ('doThrow()' est inutile dans ce cas sauf pour la cohérence.) – 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() 
    } 
}); 

C'est un moyen détourné de le faire. Mais ça devrait marcher.

2

Vous pouvez utiliser:

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