Mock/Test-Super-Klasse-Aufruf in Unterklasse..ist es möglich?
Ich bin auf der Suche nach einer Lösung zu verspotten, der super-Aufruf in Unterklasse ButtonClicker.
Class Click {
public void buttonClick() throws java.lang.Exception { /* compiled code */} }
Class ButtonClicker extends Click {
@Override
public void buttonClick() throws Exception {
super.buttonClick();
} }
- Bitte ein bisschen klarer, wenn du eine Frage stellst. Bitte erläutern....
- Ich kann nicht denken, ein Anwendungsfall, in dem die Verspottung ButtonClicker 's" buttonClick " - Methode würde nicht Ihre Bedürfnisse - können Sie erklären, Ihren Fall?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vererbung reduziert die Testbarkeit des Codes. Betrachten Sie ersetzen die Vererbung mit der delegation und verspotten die Stellvertretung.
Extrahieren Sie die Schnittstelle IClicker
Implementieren
IClicker
imClicker
Klasse. In Fall, dass Sie in Kooperation mit third-party-code erwägen Sie die Verwendung Adapter-MusterSchreiben Sie Ihre
ButtonClicker
wie folgt:Nun geben Sie nur den mock-als Konstruktor-parameter:
Die Antwort ist Nein. Ein mock ist nur eine triviale Schnittstelle-Implementierung. (Ich meine Schnittstelle in der API Sinn, nicht die spezifische Java-Schlüsselwort Sinn.) Damit es nicht zu wissen, über alle details zur Implementierung wie die Klasse implementiert die Funktionalität (es gibt keine Funktion, im wesentlichen).
Können Sie erstellen einen "Spion" auf ein reales Objekt, das Sie verspotten nur einige Methoden und nicht andere, aber auch das wird dich nicht verspotten, nur die super-Methode der Klasse, da die Methode(N), die Sie wählen, zu verspotten, sind in der Regel gewählt, die von der Signatur, die ist die gleiche für sowohl die sub-Klasse und super-Klasse.
ButtonClicker spy = Mockito.spy(new ButtonClicker()); Mockito.doNothing().when((Clicker)spy).buttonClick(); spy.buttonClick();
auch dieses dint lassen Sie mich verhöhnen die super-Methode aufrufen.