Da ich Mock im Unit-Test verwende, möchte ich es einfach als Rückblick zusammenfassen.
Einfach gesagt ** "Aus der zu testenden Klasse aufgerufen, Ein Ersatz für Teile (andere Quellen). "
Beispiel: Eine Testzielklasse, die Berechnungsergebnisse ausgibt. Angenommen, es gibt eine Unterklasse, die die Berechnung tatsächlich durchführt.
Mock tritt an die Stelle dieser Unterklasse. Das ist.
Sub sub = Mock(Sub.class);
Erstellen Sie ein Mock-Objekt mit der Mock-Methode
2.Mockito.when().thenReturn();
//a ist die Teileaufrufverarbeitung
//b ist der vom aufgerufenen Teil zurückgegebene Wert
Mockoito.when(sub.getAns()).thenReturn(b);
Ich rufe die Sub-Klasse für die zu testende Quelle auf. Wenn der Teil mit dem Namen Sub nicht abgeschlossen ist Der Test schlägt beim aufrufenden Teil fehl und ich kann ihn nicht bis zum Ende bestehen. Wenn daher die getAns-Methode der Sub-Klasse mit dem obigen Prozess aufgerufen wird, Wenn Sie es anweisen, den Wert b zurückzugeben, können Sie den Prozess im Test bestehen.
3.MockObjectManager.setReturnValueAt
//1. Argument=Klassenbezeichnung
//2. Argument=Methodenname
//3. Argument=Anzahl der Anrufe
//4. Argument=Rückgabewerteinstellung
MockObjectManager.setReturnValueAt(Sub.class, "getAns", 0, b);
MockObjectManager.setReturnValueAt(Sub.class, "getAns", 1, b);
Wird auch mit Mockito verwendet. Notieren Sie die Anzahl der Aufrufe des dritten Arguments. Wenn derselbe Teil in der Testzielquelle mehrmals verwendet wird Es ist notwendig, entsprechend der Anzahl der Male zu schreiben.
4.Mockito.any
//Mockito.irgendein Beispiel
//↓ Der Int-Typ gibt b zurück, egal was kommt
Mockito.when(sub.getAns(Mocito.anyInt(), Mockito.anyInt())).thenReturn(b);
In der zu testenden Hauptklasse, ohne das Argument beim Aufruf von sub.getAns anzugeben Alles, was gut ist, wenn es sich um einen Int-Typ handelt.
Dies wird hauptsächlich verwendet, wenn Sie die Abdeckung hauptsächlich sehen möchten. Es gibt auch Mockito.anyString (), Mockito.anyMap () und cast (Klasse) Mockito.any.
//Main=Quelle getestet werden
Main main = new Main();
//Sub=Andere Klassenteile
Sub sub = new Sub();
//↓ ↓ Andere Dinge, die ich benutzt habe
//Geben Sie die Variable sub an, die im Feld der Hauptklasse deklariert ist
Field field = Main.getDeclaredField("sub");
//Entfernen Sie Zugriffsbeschränkungen für private Variablen
field.setAccessible(true);
//Legen Sie einen Wert für eine private Variable fest
field.set(main, sub);
Wenn Sie es in einer Reihe von Schritten zum Verspotten verwenden, sieht es wie folgt aus.
Sub sub = Mock(Sub.class);
Field field = main.getDeclaredField("sub");
field.setAccessible(true);
field.set(main, sub);
//If getAns ist eine Methode zum Hinzufügen von zwei Argumenten
Mockito.when(sub.getAns(1,1)).thenReturn(2);
Sub sub = Mock(Sub.class);
Field field = main.getDeclaredField("sub");
field.setAccessible(true);
field.set(main, sub);
//Wenn das formale Argument von getAns vom Typ DTO ist
AnsDTO ansDto = new AnsDTO();
ansDto.setMath1(1);
ansDto.setMath2(1);
Mockito.when(sub.getAns(ansDto)).thenReturn(3);
Recommended Posts