Ich versuche herauszufinden, wie man am besten eine Einheitstest für eine überschriebene Methode schreibt, die super() als letzten Schritt aufruft. Grundsätzlich möchte ich die Parameter vor ihrer Verwendung in der Basisklasse anpassen.
Hier ist ein Beispiel für eine Methode:
@Override
public JobExecution run(Job job, JobParameters passedParams)
throws JobExecutionAlreadyRunningException, JobRestartException {
JobParameters launchParameters;
if(passedParams.isEmpty()) {
launchParameters = jobParameterSetter.getJobParameters();
} else {
launchParameters = passedParams;
}
return super.run(job, launchParameters);
}
Letztendlich möchte ich nur die Parameter überprüfen, die im super.run() Aufruf verwendet werden, was alles ist, was ich testen möchte. Die Basisklasse hat mehrere Abhängigkeiten und es ist wirklich nicht notwendig, diese Klasse zu testen (ganz zu schweigen von der zusätzlichen Arbeit).
Komposition ist eine Lösung, aber es handelt sich um eine ziemlich komplizierte Basisklasse und ich muss das gesamte Ding freilegen, während ich nur ein paar Methoden überschreibe.
Ich überlege auch, die Basisklasse für Tests zu fälschen, was einfach genug ist, aber ich bin mir nicht sicher, wie ich den Klassenpfad nur für das Ausführen des Einheitstests ändern kann (Eclipse für einzelne Tests; Maven für Build-Tests - vielleicht eine eigene Frage?).
Ich kann mir vorstellen, dass diese Frage bereits gestellt wurde, aber ich kann keine genaue Übereinstimmung finden.