Powermock überprüfen private statische Methode Aufruf in nicht-statische Methode
Liebe stackoverflow-Kameraden,
Ich habe wieder ein problem bei einem bestimmten PowerMock /Mockito Fall zu arbeiten. Das Problem ist, dass ich brauche, um zu überprüfen, den Ruf einer privaten statischen Methode, die aufgerufen wird, die mit der öffentlichen nicht-statischen Methode. Ein ähnliches Beispiel, das ich gepostet früher auf Wie zu unterdrücken und zu überprüfen, private statische Methode Aufrufe?
Dies ist mein code:
class Factory {
public 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 das ist meine Testklasse:
@RunWith(PowerMockRunner.class)
@PrepareForTest(Factory.class)
public class Tests extends TestCase {
public void testFactory() throws Exception {
Factory factory = mock(Factory.class);
suppress(method(Factory.class, "checkString", String.class));
String s = factory.factorObject();
verifyPrivate(factory, times(8000)).invoke("checkString", anyString());
}
}
Das problem hier ist, dass der Test erfolgreich ist, aber es sollte nicht sein. Es sollte nicht sein, dass die private statische Methode aufgerufen werden soll, genau 1 mal. Aber egal welchen Wert ich in Zeiten, (), ist es immer überprüft, ob es als wahr... halp 🙁
private
Methoden. Diese eng Paare Ihre unit-tests, um die Umsetzung der Ergebnisse in Schmerzen. Warum nicht prüfen Sie, dass die class
wirft ein Exception
wenn es soll?Im Grunde hast du Recht, aber leider gibt es in meinem echte - Projekt die Bedingung, wie und Wann die Ausnahme ausgelöst wird, versteckt sich in geschlossenen code. Das ist, warum ich werde für das unterdrücken Verhalten. Ich muss nur überprüfen Sie den Aufruf an.
Diese bereits beantwortet hat, in stackoverflow.com/questions/14065515/...
InformationsquelleAutor Malvin | 2013-05-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, ich glaube ich habe die Antwort, aber es war ein Kopfschmerz. Rudy gab mir den entscheidenden Hinweis mit mit mit ein Spion, aber es war noch nicht trivial (obwohl die Lösung aussieht "baby-leicht"). Hier ist die komplette Lösung:
Hallo Victor Grazi ich kann nicht herausfinden, wie ich überprüfen private statische Methode aufgerufen, in einer öffentlichen statischen Methode. Was soll ich schreiben, anstatt verifyPrivate(factorySpy, times(1)).invoke("checkString", anyString()); Zu machen, arbeiten mit mockStatic ?
InformationsquelleAutor Malvin