2010-12-07 46 views
1

J'ai la situation suivante ... Je veux lancer une exception à chaque fois qu'une méthode particulière est appelée. Je me fiche de ce qui est passé à cette méthode, je veux juste qu'une exception soit appelée. Le problème est que cette méthode prend des classes personnalisées en tant que paramètres.Est-il nécessaire d'écrire des correspondeurs personnalisés pour cette situation Mockito?

La seule façon que je l'ai trouvé pour ce faire est la suivante:

// Matches any Foo 
TypeSafeMatcher<Foo> fooMatcher = new TypeSafeMatcher<Foo>() { 
    @Override 
    public Boolean matchesSafely(Foo foo) { 
    return true; 
    } 

    // more overrides 
} 

doThrow(new RuntimeException("dummy exception")).when(mockObj).someMethod(fooMatcher); 

J'ai essayé de faire ce qui suit, mais je reçois un message similaire à « ne peut convertir l'objet Foo ». .. ce qui est logique:

doThrow(new RuntimeException("dummy exception")).when(mockObj).someMethod(anyObject()); 

Je me demande s'il y a un moyen plus facile de le faire sans avoir à créer un matcher personnalisé pour chaque classe personnalisée?

Merci

Répondre

3

Avez-vous essayé le isA Matcher?

doThrow(new RuntimeException("dummy exception")).when(mockObj).someMethod(isA(Foo.class)); 
2

Un casting peut suffire:

doThrow(new RuntimeException("dummy exception")).when(mockObj).someMethod((Foo)anyObject()); 
1

Il y a aussi doAnswer() si vous voulez faire quelque chose de différent que d'élever une exception

doAnswer(new Answer() { 
     public Object answer(InvocationOnMock invocation) { 
      Object[] args = invocation.getArguments(); 
      Mock mock = invocation.getMock(); 
      return null; 
     }}) 
    .when(mock).someMethod();