Comment puis-je vérifier qu'une méthode fictive n'a pas été appelée - avec toute combinaison de paramètres - à l'aide de Mockito?
Par exemple, j'ai un objet - myObject
- qui utilise un deuxième objet simulé - myMockedOtherObject
- qui a une méthode - someMethodOrOther(String parameter1, String parameter2)
.
Je souhaite appeler myObject.myMethod()
et vérifier que someMethodOrOther()
n’est pas appelé - avec n’importe quel combinaison de paramètres.
par exemple.:
myObject.doSomeStuff();
verify(myMockedOtherObject, never()).someMethodOrOther();
Sauf que je ne peux pas le faire, car someMethodOrOther()
nécessite la fourniture de paramètres spécifiques.
Vous pouvez accomplir ce que vous voulez avec les arguments de Mockito:
myObject.doSomeStuff();
verify(myMockedOtherObject, never()).someMethodOrOther(
Mockito.anyString(),
Mockito.anyString()
);
Bien sûr, vous pouvez rendre cela un peu moins verbeux avec une importation statique comme celle que vous avez pour verify
et never
.
Vous devez utiliser des correspondeurs d'arguments pour faire des choses comme celle-ci. Vous fournissez un correcteur d'arguments correspondant à chaque paramètre de votre méthode, mais vous devez vous assurer que vous en choisissez un qui a le bon type. Tous ceux dont vous aurez probablement besoin sont répertoriés dans http://docs.mockito.googlecode.com/hg/latest/org/mockito/Matchers.html .
Supposons que votre méthode est
public void myMethod(
String text, int count, MyClass something, List<MyClass> someList) {
// ...
}
Votre déclaration de vérification pourrait ressembler à ceci.
verify(myMock, never()).myMethod(
anyString(), anyInt(), any(MyClass.class), anyListOf(MyClass.class));
Certains des correspondants dont vous aurez probablement besoin sont -
anyInt(), anyLong(), anyShort(), anyBoolean(), anyByte(), anyChar(), anyFloat(), anyDouble()
- Ceux-ci correspondent à la version primitive ou à la version d'objet de chacun de ces types. Dans mon exemple, j'ai utilisé anyInt()
pour faire correspondre une int
, mais cela correspond également à une Integer
.any(XXX.class)
- Cela correspond à n'importe quel type d'objet. Dans mon exemple, je l'ai utilisé pour faire correspondre une MyClass
.anyString()
- C’est une autre façon d’écrire any(String.class)
anyListOf(XXX.class), anySetOf(XXX.class), anyMapOf(XXX.class, XXX.class)
- Celles-ci permettent de faire correspondre les types de collection génériques standard. Dans mon exemple, j'ai utilisé anyListOf
pour faire correspondre le List<MyClass>
.Il y en a une poignée d'autres et je vous recommande vivement de parcourir brièvement le Javadoc. Mais ce sont ceux-là que vous utiliserez le plus probablement avec never()
.
Manière plus claire de présenter la solution
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.never;
//Testing scenario
verify(mockObject, never()).someMethod(mockParam1, MockParam2);