Angenommen , ich habe einen Klasse - Manager von einer Basisklasse abgeleiteten Mitarbeitern und dass Mitarbeiter haben eine Methode getEmail () , die von geerbt wird Manager . Soll ich testen, ob das Verhalten der getEmail () -Methode eines Managers tatsächlich dem eines Mitarbeiters entspricht?
Zum Zeitpunkt der Erstellung dieser Tests ist das Verhalten dasselbe, aber irgendwann in der Zukunft könnte natürlich jemand diese Methode außer Kraft setzen, ihr Verhalten ändern und daher meine Anwendung unterbrechen. Es scheint jedoch ein bisschen seltsam, im Wesentlichen auf das Fehlen von Einmischcode zu prüfen .
(Beachten Sie, dass das Testen der Manager :: getEmail () -Methode die Codeabdeckung (oder andere Codequalitätsmetriken (?)) Erst verbessert, wenn Manager :: getEmail () erstellt / überschrieben wird.)
(Wenn die Antwort "Ja" lautet, sind einige Informationen zum Verwalten von Tests hilfreich, die zwischen Basisklassen und abgeleiteten Klassen geteilt werden.)
Eine äquivalente Formulierung der Frage:
Wenn eine abgeleitete Klasse eine Methode von einer Basisklasse erbt, wie können Sie ausdrücken (testen), ob Sie von der geerbten Methode Folgendes erwarten:
- Verhalten Sie sich genauso wie die Basis im Moment (wenn sich das Verhalten der Basis ändert, ändert sich das Verhalten der abgeleiteten Methode nicht).
- Verhalten Sie sich für alle Zeiten genauso wie die Basis (wenn sich das Verhalten der Basisklasse ändert, ändert sich auch das Verhalten der abgeleiteten Klasse). oder
- Benimm dich, wie es dir gefällt (das Verhalten dieser Methode ist dir egal, weil du sie nie aufrufst).
Manager
Klasse abzuleiten,Employee
war der erste große Fehler.