Ich möchte überprüfen, ob eine private Methode meiner Klasse ausgeführt wird oder nicht powermockito verwendet.Verwenden Sie Powermockito, um zu überprüfen, ob eine private Methode aufgerufen wird oder nicht
Angenommen, dass ich diese Klasse zu testen:
public class ClassToTest {
public boolean methodToTest() {
//doSomething (maybe call privateMethod or maybeNot)
return true;
}
//I want to know if this is called or not during the test of "methodToTest".
private void privateMethod() {
//do something
}
}
Wenn ich teste „methodToTest“ Ich prüfen wollen, ob es das richtige Ergebnis liefert, sondern auch, wenn es führt die private Methode „privateMethod“ ist oder nicht. Suche auf andere Diskussion Ich schrieb diesen Test, der powermotorito verwendet, aber es funktioniert nicht.
public class TestClass {
@Test
testMethodToTest(){
ClassToTest instance = new ClassToTest();
boolean result = instance.methodToTest();
assertTrue(result, "The public method must return true");
//Checks if the public method "methodToTest" called "privateMethod" during its execution.
PowerMockito.verifyPrivate(instance, times(1)).invoke("privateMethod");
}
}
Wenn ich den Debugger verwenden, scheint es, dass die letzte Zeile (PowerMockito.verifyPrivate ...) prüft nicht, ob die private Methode während des Tests einmal ausgeführt worden ist, sondern scheint es, dass es die private ausführt Methode selbst. Außerdem übergibt der Test, aber mit dem Debugger bin ich mir sicher, dass die private Methode beim Aufruf von "instance.methodToTest()" nicht ausgeführt wird. Was ist los?
Sie versuchen, eine reale Instanz einer Klasse zu verifizieren, nicht eine falsche! –
Uhm ich habe was verpasst, was ist der richtige Weg, es zu tun? Ist es richtig, das Verhalten eines Mocks zu testen? Ich vermutete, dass die Mock-Objekte nur dazu verwendet wurden, die Referenzen zu verbergen, die die zu testende Klasse mit anderen Objekten hat, und dass die Instanz der zu testenden Klasse eine echte sein sollte. – user2572526
Warum interessiert es dich, wenn es heißt? Der ganze Test sollte sich darum kümmern, ob die öffentliche Methode das Richtige tut und sich nicht darum kümmern sollte, ob bestimmte private Methoden aufgerufen werden. –