[JAVA] Vérifiez le contenu de l'objet argument avec Mockito

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é.

référence

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

Comment faire un matcher

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();
    }

}

Comment utiliser

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)));

À la fin

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

Vérifiez le contenu de l'objet argument avec Mockito
[Rails] Vérifiez le contenu de l'objet
Vérifiez le contenu des paramètres avec le levier
Mettre en forme le contenu de LocalDate avec DateTimeFormatter
Écraser le contenu de la configuration avec Spring-boot + JUnit5
Lister le contenu des catégories créées avec Active Hash
Tester le contenu d'un fichier Excel avec JUnit
L'illusion de l'orientation objet
Remplacez le contenu du fichier Jar
[Ruby] Afficher le contenu des variables
Vérifiez le contenu du magasin de certificats Java
Mémo: [Java] Vérifiez le contenu du répertoire
Pliage et dépliage du contenu de la vue Recycleur
[Ruby] Coupez le contenu des publicités Twitter
Vérifiez le caractère unique de votre adresse e-mail
Vérifiez le contenu du traitement avec [rails] binding.pry
À propos du traitement de BigDecimal (avec réflexion)
Le contenu des données enregistrées par CarrierWave.
[Java] Récupère MimeType à partir du contenu du fichier avec Apathce Tika [Kotlin]
Après tout, je voulais prévisualiser le contenu de mysql avec Docker ...
Incrémenté du troisième argument de la méthode iterate de la classe Stream ajoutée depuis Java9
JAVA: jar, aar, affichez le contenu du fichier
Personnalisez la répartition du contenu de Recyclerview
Gérez la version de Ruby elle-même avec rbenv
L'histoire du réglage de l'application Android avec libGDX
Je veux var_dump le contenu de l'intention
Calculer le score de similarité des chaînes de caractères avec JAVA
Préparez l'environnement CentOS 8 avec Sakura VPS
Spécifiez la valeur par défaut avec @Builder of Lombok
Mesurez la distance du labyrinthe avec la recherche de priorité de largeur
J'ai vérifié le nombre de taxis avec Ruby
[Docker] Comment voir le contenu des volumes. Démarrez un conteneur avec les privilèges root.
[Kotlin] Récupère le nom de l'argument du constructeur par réflexion
JavaFX --Match la taille d'ImageView avec d'autres nœuds
CI l'architecture des applications Java / Kotlin avec ArchUnit
[JUnit 5] Traiter de "la référence d'assertEquals est ambiguë"
Accédez au h2db intégré de Spring Boot avec jdbcTemplate
L'histoire de la création d'un proxy inverse avec ProxyServlet
Surveillez l'état interne des programmes Java avec Kubernetes
Implémentez iOS14 UICollectionView avec le code minimum requis.
Vérifiez le comportement de Java Intrinsic Locks avec bpftrace
[Rails] Comment obtenir le contenu des paramètres forts
Vérifiez le résultat de l'inférence de paramètre de type générique avec JShell
Java: utilisez Stream pour trier le contenu d'une collection
À peu près le flux de développement d'applications Web avec Rails.
Contrôlez le flux de traitement Spring Batch avec JavaConfig.
Comment la valeur suivante de l'objet Time est-elle correcte?
L'histoire de la création de DTO, semblable à Dao avec Java, SQLite
Remplacez seulement une partie de l'hôte URL par java
Je veux recréer le contenu des actifs à partir de zéro dans l'environnement construit avec capistrano