En travaillant chez JUnit, lorsque j'utilisais un framework appelé Mockito comme une sorte d'objet simulé, il n'a pas renvoyé Output comme je m'y attendais et il a fondu pendant une demi-journée, alors j'ai pris une note.
↓ Site d'introduction Mockito. Comment boire Mockito
Par exemple, si vous souhaitez tester un modèle dans lequel null est inclus dans l'argument de la méthode getContent
de la classe Controller </ b> dans la source suivante. (Le code est cité et modifié à partir du site ci-dessus.)
getContent
est une méthode qui utilise getContentById
de la classe Service à l'intérieur, mais lorsque vous voulez tester uniquement la logique directement sous getContent
, vous ne voulez pas vous soucier de la logique à l'intérieur de getContentById
. Par conséquent, utilisez Mockito pour spécifier des E / S qui ne dépendent pas de la logique dans getContentById
, et effectuez un test indépendant pour chaque classe.
Controller.java
public class Controller
{
private Service service = new Service();
public String getContent(String id) {
String content = service.getContentById(id);
return content;
}
}
Service.java
public class Service
{
private Map contents = new HashMap();
//constructeur
public Service(){ genContents(); }
//Spécifiez la clé et la valeur de retour
public String getContentById(String id) {
String content;
content = contents.get(id);
return content;
}
//Créer du contenu
public void genContents() {
contents.put("1","Tanaka");
contents.put("2","Saitou");
contents.put("3","Yoshida");
contents.put("4","Suzuki");
}
}
Le mauvais code suivant
public class Test{
Controller controller = new Controller();
//Faire un service factice, je ne connais pas le contenu
Service service = mock(Service.class);
// I/Seul O est défini séparément
doReturn("Content1").when(service).getContentById(Mockito.anyString());
}
Instructions commençant par doReturn
"Renvoie la chaîne Content1 chaque fois qu'elle est appelée avec n'importe quel type Int comme argument."
Cependant, dans cette hypothèse, puisque l'argument de getContentId
est nul, anyString () n'est pas spécifié et getContent ne renvoie rien. Par conséquent, nous allons spécifier un argument plus large.
Corriger le code ci-dessous
doReturn("Content1").when(service).getContentById(Mockito.any());
Maintenant dans la méthode getContentById
"Renvoie la chaîne Content1 lorsqu'elle est appelée car tout va bien"
Vous pouvez ajouter le paramètre. J'ai pu le déplacer même si l'argument était nul.
Dans l'entreprise réelle, j'ai utilisé ʻArgumentMatchers.any (~~~ .class) au lieu de
Mockito.Any ~ () `pour simuler la méthode avec mon propre argument de type, mais cette fois J'ai essayé de l'écrire avec un modèle de type String plus facilement.
Postscript