2010-02-26 22 views

Répondre

26

Je ne suis pas vraiment le problème que vous rencontrez en utilisant Mockito. En supposant que vous créez une maquette de l'interface qui contient votre méthode myMethod(), vous pouvez vérifier que les paramètres de la méthode que vous êtes intéressé par Par exemple (en supposant que l'interface est appelée MyInterface et 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 any() matcher se fiche de la valeur qui a été transmise lors de la vérification.

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

+1

Je suppose qu'il veut vraiment appeler myMethod(), il doit donc passer tous ces paramètres à chaque fois ce qui gonfle le test. –

+0

Je suis en train de tester un contrôleur et j'utilise ma méthode de service. le service est raillé. Je suppose que le any() devrait fonctionner. Merci –

3

Créer une classe wrapper qui appelle la méthode réelle et remplit tous les arguments, mais ceux que vous donnez (a.k.a « délégation »).

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

+4

True - trop de paramètres sur une signature de méthode est un mauvais code «odeur». – SteveD

+0

J'ai 5 paramètres, et oui ils sont nécessaires :) C'est une méthode de service que je suis en train d'essayer. Je voulais seulement être théorique pour les méthodes où vous ne voulez pas vraiment taper les paramètres –

+0

Le problème avec "un million" d'arguments semble être un problème très commun avec de nombreux services SOAP. #fail – Kimble

10

utilisation mockito.any

si myobj MyMethod accepte string, string, bar par exemple

à bouchonner un appel

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

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

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