[JAVA] Überprüfen Sie den Inhalt des Argumentobjekts mit Mockito

Bei der Verwendung von Mockito wird häufig gesagt, dass "ob eine Methode aufgerufen wird" anhand der Verifizierungszeiten () überprüft wird, die Überprüfung des an die Methode übergebenen Arguments (Inhalt des Objekts) jedoch Gibt es eine Möglichkeit, dies zu tun? Ich dachte und untersuchte es.

Referenz

https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/ArgumentMatchers.html https://www.codeflow.site/ja/article/mockito-argument-matchers

Wie man einen Matcher macht

Erstellen Sie einen benutzerdefinierten Matcher, indem Sie von org.mockito.ArgumentMatcher erben. HashMap würde so aussehen.

HashMapMatcher.java


import java.util.HashMap;

import org.mockito.ArgumentMatcher;

public class HashMapMatcher implements ArgumentMatcher<HashMap<String, String>> {
	HashMap<String, String> map;

    public HashMapMatcher(HashMap<String, String> map) {
        this.map = map;
    }

    @Override
    public boolean matches(HashMap<String, String> actual) {
		if (this.map.keySet().size() != actual.keySet().size()) {
    		return false;
    	}
    	for (String key : this.map.keySet()) {
    		if (!actual.containsKey(key)) {
    			return false;
    		}
    		if (!this.map.get(key).equals(actual.get(key))) {
    			return false;
    		}
    	}
        return true;
    }
    
    //Wenn Sie den gesamten Inhalt der Karte überschreiben und entfernen, ist es einfacher, wenn der Test fehlschlägt.
    @Override
    public String toString() {
    	//Sie können auswählen, wie Sie es ausgeben möchten.
    	StringBuffer sb = new StringBuffer();
    	for (String key : this.map.keySet()) {
    		sb.append("[key:").append(key);
    		sb.append(", value:").append(map.get(key)).append("]");
    	}
    	return sb.toString();
    }

}

Wie benutzt man

Übergeben Sie einen benutzerdefinierten Matcher an org.mockito.ArgumentMatchers.argThat und verwenden Sie ihn.

HogeTest.java


// hoge.save(map);Wird aufgerufen, um zu überprüfen, ob die Argumente mit den erwarteten übereinstimmen
verify(hoge,atLeastOnce()).save(argThat(new HashMapMatcher(map)));

Am Ende

Es scheint, dass es nicht zur Überprüfung verwendet werden kann, sondern zur Überprüfung, wenn ~ dann Return. Lassen Sie uns das Testleben genießen.

Recommended Posts

Überprüfen Sie den Inhalt des Argumentobjekts mit Mockito
[Schienen] Überprüfen Sie den Inhalt des Objekts
Überprüfen Sie den Inhalt der Parameter mit pry
Formatieren Sie den Inhalt von LocalDate mit DateTimeFormatter
Überschreiben Sie den Inhalt der Konfiguration mit Spring-boot + JUnit5
Listen Sie den Inhalt von Kategorien auf, die mit Active Hash erstellt wurden
Testen Sie den Inhalt einer Excel-Datei mit JUnit
Die Illusion der Objektorientierung
Ersetzen Sie den Inhalt der Jar-Datei
[Ruby] Zeigt den Inhalt von Variablen an
Überprüfen Sie den Inhalt des Java-Zertifikatspeichers
Anmerkung: [Java] Überprüfen Sie den Inhalt des Verzeichnisses
Ein- und Ausklappen des Inhalts der Recycler-Ansicht
[Ruby] Schneiden Sie den Inhalt von Twitter-Anzeigen ab
Überprüfen Sie die Eindeutigkeit Ihrer E-Mail-Adresse
Überprüfen Sie den Verarbeitungsinhalt mit [Rails] Binding.pry
Über die Behandlung von BigDecimal (mit Reflexion)
Der Inhalt der von CarrierWave gespeicherten Daten.
[Java] Holen Sie sich MimeType aus dem Inhalt der Datei mit Apathce Tika [Kotlin]
Immerhin wollte ich den Inhalt von MySQL mit Docker in der Vorschau anzeigen ...
Inkrementiert durch das dritte Argument der iterierten Methode der aus Java9 hinzugefügten Stream-Klasse
JAVA: jar, aar, zeige den Inhalt der Datei an
Passen Sie an, wie der Inhalt von Recyclerview aufgeteilt wird
Verwalten Sie die Version von Ruby selbst mit rbenv
Die Geschichte der Optimierung der Android-App mit libGDX
Ich möchte den Inhalt der Absicht var_dump
Berechnen Sie die Ähnlichkeitsbewertung von Zeichenketten mit JAVA
Bereiten Sie die CentOS 8-Umgebung mit Sakura VPS vor
Geben Sie den Standardwert mit @Builder of Lombok an
Messen Sie den Abstand des Labyrinths mit der Suche nach Breitenpriorität
Ich habe die Anzahl der Taxis mit Ruby überprüft
[Docker] So sehen Sie den Inhalt von Volumes. Starten Sie einen Container mit Root-Rechten.
[Kotlin] Ermittelt den Argumentnamen des Konstruktors durch Reflektion
JavaFX - Passen Sie die Größe von ImageView an andere Knoten an
CI die Architektur von Java / Kotlin-Anwendungen mit ArchUnit
[JUnit 5] Der Umgang mit "der Referenz von assertEquals ist mehrdeutig"
Greifen Sie mit jdbcTemplate auf das integrierte h2db des Spring Boot zu
Die Geschichte, einen Reverse-Proxy mit ProxyServlet zu erstellen
Überwachen Sie den internen Status von Java-Programmen mit Kubernetes
Implementieren Sie iOS14 UICollectionView mit dem minimal erforderlichen Code.
Überprüfen Sie das Verhalten von Java Intrinsic Locks mit bpftrace
[Rails] So erhalten Sie den Inhalt starker Parameter
Überprüfen Sie das Ergebnis der generischen Parameterinferenz mit JShell
Java: Verwenden Sie Stream, um den Inhalt einer Sammlung zu sortieren
Etwa der Ablauf der Entwicklung von Webanwendungen mit Rails.
Steuern Sie den Spring Batch-Verarbeitungsablauf mit JavaConfig.
Wie ist der nächste Wert des Time-Objekts korrekt?
Die Geschichte von dto, dao-like mit Java, SQLite
Ersetzen Sie nur einen Teil des URL-Hosts durch Java
Ich möchte den Inhalt von Assets in der mit capistrano erstellten Umgebung von Grund auf neu erstellen