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