2014-01-29 3 views
15

Was ist der Unterschied zwischen:Mockito isA() & any ...()

verify(mock, times(1)).myMethod(Matchers.isA(String.class)); 
    verify(mock, times(1)).myMethod(Matchers.anyString()); 

aus der Mockito Bibliothek? Beides gilt für meine Methode und ich frage mich, welche "besser" zu verwenden ist.

+7

BTW, 'mal (1)' ist die Standardeinstellung und kann ausgeschaltet werden –

Antwort

17

isA überprüft, ob die Klasse der erwarteten Klasse entspricht. In Mockito 1.x, any, anyObject und anyString ignorieren Sie das Argument vollständig einschließlich seines Typs, obwohl any einen Klassenparameter und anyString im Namen angeben kann.

Wenn Sie keinen Grund haben, sich vor einem inkompatiblen Argument zu schützen, können Sie sich wahrscheinlich an any und anyString halten. Der Mockito-Stil bevorzugt flexible Testfälle, was bedeutet, dass nur die Dinge überprüft werden, die Sie explizit überprüfen, und dass absichtlich alles andere unspezifiziert ist.

UPDATE: Mockito committer Brice hat some historical background and future direction angeboten:

Aus historischen Referenz, any ist eine Abkürzung Alias ​​anything, zu diesem Zeitpunkt der API einen zwingt zu werfen, und Mitwirkenden und/oder Committer dachte darüber nach, die Klasse als Parameter zu übergeben, um diese Umwandlung zu vermeiden, ohne die Semantik dieser API zu ändern. Diese Änderung änderte jedoch schließlich, was die Leute von dieser API hielten. Dies wird in Mockito 2 +