Ich habe kein Glück, dass Mockito Funktionsargumentwerte erfasst! Ich verspotte einen Suchmaschinenindex und anstatt einen Index zu erstellen, verwende ich nur einen Hash.
// Fake index for solr
Hashmap<Integer,Document> fakeIndex;
// Add a document 666 to the fakeIndex
SolrIndexReader reader = Mockito.mock(SolrIndexReader.class);
// Give the reader access to the fake index
Mockito.when(reader.document(666)).thenReturn(document(fakeIndex(666))
Ich kann keine beliebigen Argumente verwenden, da ich die Ergebnisse von Abfragen teste (dh welche Dokumente sie zurückgeben). Ebenso möchte ich nicht für jedes Dokument einen bestimmten Wert angeben und eine Zeile haben!
Mockito.when(reader.document(0)).thenReturn(document(fakeIndex(0))
Mockito.when(reader.document(1)).thenReturn(document(fakeIndex(1))
....
Mockito.when(reader.document(n)).thenReturn(document(fakeIndex(n))
Ich habe mir den Abschnitt mit Rückrufen auf der Seite Using Mockito angesehen . Leider ist es kein Java und ich konnte meine eigene Interpretation davon nicht in Java zum Laufen bringen.
BEARBEITEN (zur Verdeutlichung): Wie kann ich Mockito dazu bringen, ein Argument X zu erfassen und an meine Funktion zu übergeben? Ich möchte, dass der genaue Wert (oder die Referenz) von X an die Funktion übergeben wird.
Ich möchte nicht alle Fälle aufzählen, und ein beliebiges Argument funktioniert nicht, da ich für verschiedene Abfragen auf unterschiedliche Ergebnisse teste.
Die Mockito-Seite sagt
val mockedList = mock[List[String]]
mockedList.get(anyInt) answers { i => "The parameter is " + i.toString }
Das ist kein Java, und ich weiß nicht, wie ich es in Java übersetzen oder was auch immer passiert ist, an eine Funktion übergeben soll.
quelle
Mockito.when(reader.document(666)).thenReturn(document(fakeIndex(666))
sollte das Scheinobjekt für Sie einrichten. Was passiert, wenn Sie anrufenreader.document(666)
?Antworten:
Ich habe Mockito noch nie benutzt, möchte aber lernen, also geht es weiter. Wenn jemand weniger ahnungslos als ich antwortet, versuchen Sie zuerst seine Antwort!
quelle
Schauen Sie sich ArgumentCaptors an:
https://site.mockito.org/javadoc/current/org/mockito/ArgumentCaptor.html
quelle
ArgumentCaptor
s zum Stubben verwenden kannst. Es gibt jedoch eine große alte Warnung in diesem Link. Mit Vorsicht fortfahren.Möglicherweise möchten Sie verify () in Kombination mit dem ArgumentCaptor verwenden, um die Ausführung im Test sicherzustellen, und dem ArgumentCaptor, um die Argumente auszuwerten:
Der Wert des Arguments ist offensichtlich über argument.getValue () zugänglich, um weitere Manipulationen / Überprüfungen durchzuführen oder was auch immer Sie tun möchten.
quelle
Mit Java 8 könnte dies ungefähr so aussehen:
Ich gehe davon aus, dass dies
document
eine Karte ist.quelle