[JAVA] Ce que j'ai appris ② ~ Mock ~

introduction

Puisque j'utilise Mock dans le test unitaire, j'aimerais le résumer facilement en tant que critique.

Qu'est-ce que Mock

Tout simplement ** "Appelé depuis la classe en cours de test, Un substitut aux pièces (autres sources). "

Par exemple, une classe cible de test qui produit des résultats de calcul, Supposons qu'il existe une sous-classe qui effectue réellement le calcul.

Mock remplace cette sous-classe. C'est.

Résumé simulé

1. Génération d'objets simulés

Sub sub = Mock(Sub.class);

Créer un objet simulé à l'aide de la méthode Mock

2.Mockito.when().thenReturn();

//a est le traitement de l'appel de pièce
//b est la valeur renvoyée par la partie appelée
Mockoito.when(sub.getAns()).thenReturn(b);

J'appelle la classe Sub sur la source sous test, Lors de la réussite du test, si la partie appelée Sub n'est pas terminée Le test échoue à la partie appelante et je ne peux pas le passer à la fin. Par conséquent, lorsque la méthode getAns de la classe Sub est appelée à l'aide du processus ci-dessus, Si vous lui demandez de renvoyer la valeur b, vous pouvez réussir le processus dans le test.

3.MockObjectManager.setReturnValueAt

//1er argument=Désignation de classe
//2ème argument=Nom de la méthode
//3e argument=Nombre d'appels
//4ème argument=Réglage de la valeur de retour
MockObjectManager.setReturnValueAt(Sub.class, "getAns", 0, b);
MockObjectManager.setReturnValueAt(Sub.class, "getAns", 1, b);

Également utilisé avec Mockito. En 2. Notez le nombre d'appels au troisième argument. Si la même pièce est utilisée plusieurs fois dans la source cible de test Il faut écrire en fonction du nombre de fois.

4.Mockito.any

//Mockito.n'importe quel exemple
//↓ Le type Int renvoie b quoi qu'il arrive
Mockito.when(sub.getAns(Mocito.anyInt(), Mockito.anyInt())).thenReturn(b);

Dans la classe Main à tester, sans spécifier l'argument lors de l'appel de sub.getAns Tout ce qui est bon si c'est un type int.

Ceci est principalement utilisé lorsque vous souhaitez voir la couverture principalement. Il existe également Mockito.anyString (), Mockito.anyMap () et cast (class) Mockito.any.

Autres utilisés dans les tests utilisant Mock


//Main=Source à tester
Main main = new Main();
//Sub=Autres pièces de classe
Sub sub = new Sub();

//↓ ↓ Autres choses que j'utilisais
//Spécifiez la variable sub déclarée dans le champ de la classe Main
Field field = Main.getDeclaredField("sub");

//Supprimer les restrictions d'accès aux variables privées
field.setAccessible(true);

//Définir une valeur pour une variable privée
field.set(main, sub);

à la fin

Si vous l'utilisez dans une série d'étapes pour se moquer, ce sera comme suit.

Exemple 1


Sub sub = Mock(Sub.class);
Field field = main.getDeclaredField("sub");
field.setAccessible(true);
field.set(main, sub);

//Si getAns est une méthode d'ajout de deux arguments
Mockito.when(sub.getAns(1,1)).thenReturn(2);

Exemple 2


Sub sub = Mock(Sub.class);
Field field = main.getDeclaredField("sub");
field.setAccessible(true);
field.set(main, sub);

//Lorsque l'argument formel de getAns est de type DTO
AnsDTO ansDto = new AnsDTO();
ansDto.setMath1(1);
ansDto.setMath2(1);

Mockito.when(sub.getAns(ansDto)).thenReturn(3);

Recommended Posts

Ce que j'ai appris ② ~ Mock ~
Ce que j'ai appris
Ce que j'ai appris ① ~ DJUnit ~
Ce que j'ai appris sur Kotlin
Ce que j'ai appris en étudiant les rails
Ce que j'ai appris avec Java Gold
Ce que j'ai appris avec Java Silver
Ce que j'ai appris du calcul monétaire Java
Résumé de ce que j'ai appris sur Spring Boot
Ce que j'ai appris en Java (partie 2) Que sont les variables?
Résumé de ce que j'ai appris dans Spring Batch
J'écrirai quand même ce que j'ai appris sur docker (deuxième)
Ce que j'ai appris en Java (partie 3) Déclaration d'exécution des instructions
Ce que j'ai appris lors de la création d'un serveur en Java
J'écrirai de toute façon ce que j'ai appris sur docker (en premier)
Je savais ce qu'était la réflexion
Ce que j'ai recherché sur Java 6
Ce que vous avez appris sur le hachage
Ce que j'ai recherché sur Java 9
Ce que vous avez appris sur les symboles
Ce que j'ai recherché sur Java 7
Ce que j'ai recherché sur Java 5
Ce que j'ai appris en Java (partie 4) Branchement conditionnel et répétition
Débutant Ruby on Rails Ce que j'ai appris est résumé
Ce que j'ai appris en Java (partie 1) Flux de développement Java et présentation
[Note] Ce que j'ai appris en six mois grâce à des inexpérimentés (Java)
[Note] Ce que j'ai appris en six mois grâce à des inexpérimentés (Java) (1)
[Note] Ce que j'ai appris en six mois grâce à des inexpérimentés (Java) (3)
Ce que j'ai appris en travaillant Java avec Visual Studio Code
Ce que j'ai recherché sur l'apprentissage Java
[Rails] Ce que j'ai appris d'une petite pierre d'achoppement lors de l'utilisation de l'ascendance
Ce que j'ai étudié dans le développement de Wagby Note 1
Prenez ce que vous avez appris sur la réflexion Java
Ce que les débutants de Rails ont appris en résolvant des erreurs
Marketing Twitter? Et si je l'automatise?
J'étais accro au @Transactional de Spring
Qu'est-ce que Docker? J'ai essayé de résumer