3 Stimmen

Unit-Tests für überschriebene Methoden, die super() aufrufen

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.

1voto

nicholas.hauschild Punkte 41528

Es scheint, dass die Logik, die Sie testen möchten, der if-else-Fluss ist und NICHT der Aufruf der Basisklasse. Ich würde dies tun, indem ich eine geschützte Methode namens getLaunchParameters(JobParameters jobParameters) erstelle, die die Logik enthält, die Sie testen möchten.

Auf diese Weise wird die gewünschte Logik getestet, die nicht interessante Logik wird nicht getestet, und Sie haben einen Codeabschnitt herausgebrochen, der möglicherweise in Zukunft anderswo verwendet werden kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X