2010-12-07 3 views
1

Ich habe die folgende Situation ... Ich möchte eine Ausnahme auslösen, wann immer eine bestimmte Methode aufgerufen wird. Es ist mir egal, was in diese Methode eingeführt wird, ich möchte nur eine Ausnahme aufgerufen werden. Der Catch ist, dass diese Methode benutzerdefinierte Klassen als Parameter akzeptiert.Ist es erforderlich, benutzerdefinierte Matcher für diese Mockito-Situation zu schreiben?

Der einzige Weg, die ich gefunden habe dies mit dem folgenden zu tun ist:

// 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); 

ich folgende versucht zu tun, aber ich bin eine Meldung wie immer „kann nicht Objekt zu Foo konvertieren“. .. das macht Sinn:

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

ich frage mich, ob es ein einfacherer Weg, dies zu tun, ohne einen benutzerdefinierten Matcher für jede benutzerdefinierte Klasse erstellen zu müssen?

Dank

Antwort

3

haben Sie die isA versucht Matcher?

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

kann Gegossene genügen:

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

Es gibt auch doAnswer ist(), wenn Sie etwas anderes tun möchte, als eine Ausnahme Anhebung

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