J'essaie de créer une maquette pour un appel. Disons que j'ai cette méthode que j'essaie de décrire:
class ClassA {
public String getString(String a) {
return a + "hey";
}
}
Ce que j'essaie de faire, c'est: la 1ère instance est
when(classA.getString(eq("a")).thenReturn(...);`
dans le même cas de test
when(classA.getString([anything that is not a])).thenReturn(somethingelse);
Le 2ème cas est ma question: comment faire correspondre anyString()
autre que "a"?
Avec le framework Mockito
, vous pouvez utiliser AdditionalMatchers
ClassA classA = Mockito.mock(ClassA.class);
Mockito.when(classA.getString(Matchers.eq("a"))).thenReturn("something");
Mockito.when(classA.getString(AdditionalMatchers.not(Matchers.eq("a")))).thenReturn("something else");
J'espère que cela aide.
Utilisez argThat
avec Hamcrest:
when(classA.getString(argThat(CoreMatchers.not(CoreMatchers.equalTo("a")))...
Vous pourriez également être en mesure de le faire via la commande. Si vous placez une when(anyString)
et when(eq("a"))
dans le bon ordre, Mockito devrait les tester dans l'ordre et faire la logique "a" le cas échéant, puis la logique "anyString" sinon.
En mockito, le dernier tronçonnage est le plus important. Cela signifie que vous pouvez simplement utiliser les matchers standard pour vos besoins:
// "Default" return values.
when(classA.getString(ArgumentMatchers.anyString())).thenReturn(somethingelse);
// Specific return value for "a"
when(classA.getString(ArgumentMatchers.eq("a"))).thenReturn(something);
Notez que vous avez pour utiliser ArgumentMatchers pour les deux puisque vous les mélangez.
J'ai en fait adopté cette approche après avoir soigneusement examiné les réponses suggérées:
doAnswer(new Answer<String>() {
public String answer(InvocationOnMock invocation) throws Throwable {
String originalParam = (String) invocation.getArguments()[0];
return StringUtils.equalsIgnoreCase(originalParam, "a") ? "Something" : "Something Else";
}
}).when(classA).getString(anyString());
Cela me permet de gérer plus de deux cas en ajustant la base de retour sur les paramètres.