Wie zu unterdrücken und zu überprüfen, private statische Methode Aufrufe?
Ich bin derzeit Stolperstein in JUnit-Tests und brauche etwas Hilfe. Also habe ich diese Klasse mit statischen Methoden, die Umgestaltung einiger Objekte. Der Vereinfachung halber habe ich ein kleines Beispiel. Dies ist meine Fabrik-Klasse:
class Factory {
public static String factorObject() throws Exception {
String s = "Hello Mary Lou";
checkString(s);
return s;
}
private static void checkString(String s) throws Exception {
throw new Exception();
}
}
Und dies ist mein Test-Klasse:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Factory.class })
public class Tests extends TestCase {
public void testFactory() throws Exception {
mockStatic(Factory.class);
suppress(method(Factory.class, "checkString"));
String s = Factory.factorObject();
assertEquals("Hello Mary Lou", s);
}
}
Im Grunde das, was ich versuchte zu erreichen, dass die private Methode checkString() unterdrückt werden sollen (also die Exception wird nicht geworfen), und müssen auch sicherstellen, dass die Methode checkString() tatsächlich aufgerufen in der Methode factorObject().
AKTUALISIERT:
Die Unterdrückung funktioniert einwandfrei mit dem folgenden code:
suppress(method(Factory.class, "checkString", String.class));
String s = Factory.factorObject();
... aber es gibt mir NULL nach der Zeichenfolge "s". Warum ist das so?
Ich Stimme mit Ihnen überein, aber derzeit gibt es keine Möglichkeit, ändern Sie den vorhandenen code, also die überprüfung muss passieren, ein bisschen komplizierter.
InformationsquelleAutor Malvin | 2013-05-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, fand ich endlich die Lösung aller Probleme. Wenn jemand stolpert über ähnliche Probleme hier ist der code:
mockStatic
,suppress
,method
undverifyPrivate
?Natürlich. Oben Hinzugefügt 🙂
Zu Testzwecken habe ich auch die standalone-Pakete mit allen Abhängigkeiten: code.google.com/p/powermock/downloads/... Wenn Sie Maven müssen Sie möglicherweise weniger.
Das half mir sehr. Vielen Dank, dass Sie eine detaillierte code-Gliederung, wie es funktioniert.
InformationsquelleAutor Malvin
Yo es tun können, wie:
Für mehr details besuchen Sie :
http://powermock.googlecode.com/svn/docs/powermock-1.3.7/apidocs/org/powermock/api/mockito/PowerMockito.html
Edit:
Überprüfen........
Schauen Sie sich jetzt die edit-Teil.
Ich versuchte es jetzt so: mockStatic(Factory.class); Fabrik-spy = Spion(new Factory()); PowerMockito.doNothing().wenn(Factory.class,"checkString", Mockito.jede(String.class)); String s = spy.factorObject(); <br> Aber jetzt gibt es mir einen <null> für String s ist. Ich verstehe es nicht...
Die Unterdrückung scheint zu funktionieren aber. Wenn ich nicht unterdrücken (- Methode(Factory.class, "checkString", String.class)); Leider bekomme ich auch einen <null> anstelle der String-Deklaration in der Methode. Aber zumindest die private Methode wird offensichtlich unterdrückt. Doch warum ist der string, der plötzlich null?
InformationsquelleAutor Shreyos Adikari