web-dev-qa-db-fra.com

Mockito: comment stub facilement une méthode sans se moquer de tous les paramètres

J'ai une méthode que je voudrais stub mais elle a beaucoup de paramètres. Comment puis-je éviter de me moquer de tous les paramètres tout en bloquant la méthode.

Ex:

//Method to stub
public void myMethod(Bar bar, Foo foo, FooBar fooBar, BarFoo barFoo, .....endless list of parameters..);
23
Michael Bavin

Je ne comprends pas vraiment quel problème vous rencontrez avec Mockito. En supposant que vous créez une maquette de l'interface qui contient votre méthode myMethod(), vous pouvez ensuite vérifier uniquement les paramètres de la méthode qui vous intéresse. Par exemple (en supposant que l'interface s'appelle MyInterface et en utilisant JUnit 4):

@Test
public void test() {
    MyInterface myInterface = mock(MyInterface.class);
    FooBar expectedFooBar = new FooBar();        

    // other testing stuff

    verify(myInterface).myMethod(any(), any(), eq(expectedFooBar), any(), ...);
}

Vous devrez effectuer une importation statique sur les méthodes Mockito pour que cela fonctionne. Le matcher any() ne se soucie pas de la valeur qui a été transmise lors de la vérification.

Vous ne pouvez pas éviter de passer quelque chose pour chaque argument de votre méthode (même si ce n'est que NULL).

26
SteveD

utilisez mockito.any

si myobj mymethod accepte string, string, bar par exemple

pour bloquer un appel

Mockito.when(myojb.myMethod(Mockito.anyString(),Mockito.anyString(),Mockito.any(Bar.class)))
    .thenReturn(amockedobject);

pour vérifier que SteveD a déjà donné la réponse

Mockito.verify(myojb).myMethod(
    Mockito.anyString(),Mockito.anyString(),Mockito.any(Bar.class)));
10

Créez une classe wrapper qui appelle la vraie méthode et remplit tous les arguments sauf ceux que vous fournissez (par exemple "délégation").

Et à la prochaine occasion, déposez un bogue contre le projet demandant de déplacer les paramètres vers un objet de configuration.

3
Aaron Digulla