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.
https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/ArgumentMatchers.html https://www.codeflow.site/ja/article/mockito-argument-matchers
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();
}
}
Ü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)));
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