Ich habe die folgende Klasse:PowerMockito: Wie man Methoden vorspiegelt, die vom Erbauer genannt werden?
public class Foo {
public Foo() {
initField1();
initField2();
initField3();
}
}
Ich brauche das Verhalten zu ändern (zu verspotten) initField1()
und initField3()
für sie nichts oder etwas anderes machen tun, dass sie tatsächlich tun. Ich bin daran interessiert, den eigentlichen Code von initField2() auszuführen.
Ich mag folgenden Test schreiben:
Foo foo = new Foo();
assertTrue(foo.myGet());
myGet()
ein Attribut von Foo zurückgibt, die durch initField2()
berechnet wurde.
Die Methoden initField()
sind natürlich privat.
Wie kann ich so etwas tun?
Vielen Dank für Ihre Hilfe und beste Grüße.
Dies ist Legacy-Code. Ich möchte die zu testende Klasse nicht modifizieren, indem ich einen neuen Konstruktor schreibe, der zum Beispiel Argumente akzeptiert. Ich möchte nur 'initField2()' ausgeführt werden, da es für das Setzen des Feldes verantwortlich ist, das ich testen möchte. Ich bin nicht daran interessiert, den Rest der Logik des Konstruktors zu testen. –
Mockito soll die Interaktion spotten, PowerMock soll teilweise interne Abläufe einer Klasse für Legacy-Code nachahmen, also ist diese Antwort einfach falsch. – eis