[JAVA] Was ich gelernt habe ② ~ Mock ~

Einführung

Da ich Mock im Unit-Test verwende, möchte ich es einfach als Rückblick zusammenfassen.

Was ist Mock?

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.

Scheinzusammenfassung

1. Scheinobjektgenerierung

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.

Andere in Tests mit Mock verwendet


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

schließlich

Wenn Sie es in einer Reihe von Schritten zum Verspotten verwenden, sieht es wie folgt aus.

Beispiel 1


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

Beispiel 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

Was ich gelernt habe ② ~ Mock ~
Was ich gelernt habe
Was ich gelernt habe ~ ~ DJUnit ~
Was ich über Kotlin gelernt habe
Was ich aus dem Studium von Rails gelernt habe
Was ich mit Java Gold gelernt habe
Was ich mit Java Silver gelernt habe
Was ich aus der Java-Geldberechnung gelernt habe
Zusammenfassung dessen, was ich über Spring Boot gelernt habe
Was ich in Java gelernt habe (Teil 2) Was sind Variablen?
Zusammenfassung dessen, was ich in Spring Batch gelernt habe
Ich werde sowieso schreiben, was ich über Docker gelernt habe (zweite)
Was ich in Java gelernt habe (Teil 3) Anweisung zur Ausführung von Anweisungen
Was ich beim Erstellen eines Servers in Java gelernt habe
Ich werde sowieso schreiben, was ich über Docker gelernt habe (zuerst)
Ich wusste, was Reflexion war
Was ich über Java 6 recherchiert habe
Was du über Hashing gelernt hast
Was ich über Java 9 recherchiert habe
Was Sie über Symbole gelernt haben
Was ich über Java 7 recherchiert habe
Was ich über Java 5 recherchiert habe
Was ich in Java gelernt habe (Teil 4) Bedingte Verzweigung und Wiederholung
Anfänger Ruby on Rails Was ich gelernt habe, wird zusammengefasst
Was ich in Java gelernt habe (Teil 1) Java-Entwicklungsablauf und Überblick
[Anmerkung] Was ich in einem halben Jahr von unerfahrenen (Java) gelernt habe
[Anmerkung] Was ich in einem halben Jahr von unerfahrenen (Java) gelernt habe (1)
[Anmerkung] Was ich in einem halben Jahr von unerfahrenen (Java) gelernt habe (3)
Was ich aus Java gelernt habe, funktioniert mit Visual Studio Code
Was ich über Java-Lernen recherchiert habe
[Rails] Was ich aus einem kleinen Stolperstein bei der Verwendung von Vorfahren gelernt habe
Was ich in der Wagby-Entwicklung untersucht habe Anmerkung 1
Nehmen Sie, was Sie über Java-Reflexion gelernt haben
Was Rails-Anfänger durch das Lösen von Fehlern gelernt haben
Twitter Marketing? Was ist, wenn ich es automatisiere?
Ich war süchtig nach Spring's @Transactional
Was ist Docker? Ich habe versucht zusammenzufassen