Lors de l'utilisation de Mockito, on dit souvent que "si une méthode est appelée" est vérifiée à l'aide de verify's times (), mais la vérification de l'argument (contenu de l'objet) passé à la méthode Y a-t-il un moyen de le faire? Je l'ai pensé et examiné.
https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/ArgumentMatchers.html https://www.codeflow.site/ja/article/mockito-argument-matchers
Créez un Matcher personnalisé en héritant de org.mockito.ArgumentMatcher. HashMap ressemblerait à ceci.
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;
}
//Si vous remplacez et supprimez tout le contenu de la carte, ce sera plus facile si le test échoue.
@Override
public String toString() {
//Vous pouvez choisir comment vous souhaitez le sortir.
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();
}
}
Transmettez un Matcher personnalisé à org.mockito.ArgumentMatchers.argThat et utilisez-le.
HogeTest.java
// hoge.save(map);Est appelé pour vérifier que ses arguments sont les mêmes que ceux attendus
verify(hoge,atLeastOnce()).save(argThat(new HashMapMatcher(map)));
Il semble qu'il puisse être utilisé non pas pour vérifier mais pour vérifier quand ~ puis Return. Profitons de la vie de test.
Recommended Posts