Ich habe eine Klasse wie folgt:
public class A {
public A(String test) {
bla bla bla
}
public String check() {
bla bla bla
}
}
Die Logik im Konstruktor A(String test)
und check()
sind die Dinge, die ich verspotten möchte. Ich möchte alle Aufrufe wie: new A($$$any string$$$).check()
Gibt eine Dummy-Zeichenfolge zurück "test"
.
Ich habe es versucht:
A a = mock(A.class);
when(a.check()).thenReturn("test");
String test = a.check(); // to this point, everything works. test shows as "tests"
whenNew(A.class).withArguments(Matchers.anyString()).thenReturn(rk);
// also tried:
//whenNew(A.class).withParameterTypes(String.class).withArguments(Matchers.anyString()).thenReturn(rk);
new A("random string").check(); // this doesn't work
Aber es scheint nicht zu funktionieren. new A($$$any string$$$).check()
durchläuft immer noch die Konstruktorlogik, anstatt das verspottete Objekt von abzurufen A
.
Antworten:
Der Code, den Sie gepostet haben, funktioniert für mich mit der neuesten Version von Mockito und Powermockito. Vielleicht hast du A nicht vorbereitet? Versuche dies:
A.java
MockA.java
Beide Tests sollten mit mockito 1.9.0, powermockito 1.4.12 und junit 4.8.2 bestanden werden
quelle
PrepareForTest
Meines Wissens können Sie Konstruktoren nicht mit Mockito verspotten, sondern nur mit Methoden. Laut dem Wiki auf der Google-Codepage von Mockito gibt es jedoch eine Möglichkeit, das Konstruktorverhalten zu verspotten, indem in Ihrer Klasse eine Methode erstellt wird, die eine neue Instanz dieser Klasse zurückgibt. dann können Sie diese Methode verspotten. Unten ist ein Auszug direkt aus dem Mockito-Wiki :
Wenn Sie nur ein verspottetes Objekt Ihrer Klasse zurückgeben möchten, sollte dies für Sie funktionieren. In jedem Fall können Sie hier mehr über das Verspotten der Objekterstellung lesen:
http://code.google.com/p/mockito/wiki/MockingObjectCreation
quelle
Ohne Powermock zu verwenden ... Siehe das folgende Beispiel basierend auf der Antwort von Ben Glasser, da ich einige Zeit gebraucht habe, um es herauszufinden. Hoffentlich spart das einige Male ...
Ursprüngliche Klasse:
Geänderte Klasse:
Testklasse
quelle
Mockito hat Einschränkungen beim Testen endgültiger, statischer und privater Methoden.
Mit der jMockit-Testbibliothek können Sie einige Dinge wie folgt sehr einfach und unkompliziert erledigen:
Mock-Konstruktor einer java.io.File-Klasse:
Verspotten Sie eine statische Methode:
quelle
Mit mockito können Sie withSettings () verwenden. Wenn der CounterService beispielsweise zwei Abhängigkeiten benötigt, können Sie diese als mock übergeben:
UserService userService = Mockito.mock(UserService.class); SearchService searchService = Mockito.mock(SearchService.class); CounterService counterService = Mockito.mock(CounterService.class, withSettings().useConstructor(userService, searchService));
quelle