Frage zu Klassendesign und Test mit Mockito

WeirdAl

Bekanntes Mitglied
Hallo zusammen,
es existiert bei uns eine Klasse, die ein Rendering an eine andere Klasse weiterdelegiert. Dies sieht folgendermaßen aus:
Java:
public class ReportToPOIMerger {
...
    public void setParameters(final String sheetName, final CellReference cellRef,
        final List<StandardReportSelectionParameter> parameters) {

        if (selectionParameters != null) {
            new ParameterRenderer(connection, workbook, parameters).renderParameters(sheetName,
                cellRef);
        }
    }

    public void setTableContent(final String sheetname, final CellReference cellRef, final TableContent tableContent) {

        if (tableContent != null) {
            new TableContentRenderer(connection, workbook, tableContent).renderTableContent(sheetname, cellRef);
        }
    }
...
}

Für meinen Test den ich dazu schreiben soll, interessiert es mich nicht was diese Klasse auf welche Weise rendert. Ich prüfe in diesem Test nur andere Werte ab. Gibt es daher eine Möglichkeit diese anonymen ***Renderer Klassen zu mocken oder muss die Klasse so umgebaut werden, dass ich die Renderer mit reingebe? Letzteres will ich eigentlich nicht, da die Renderer sich nie ändern werden.

Cu
Alex
 
Gibt es daher eine Möglichkeit diese anonymen ***Renderer Klassen zu mocken oder muss die Klasse so umgebaut werden, dass ich die Renderer mit reingebe? Letzteres will ich eigentlich nicht, da die Renderer sich nie ändern werden.
Ein Mock für den Test wäre bereits eine Änderung 😉

Sowas kann man recht elegant mit Dependency Injection lösen, sodass du die konkreten Renderer nicht mehr mit new instanziierst.

Ansonsten wäre Powermock u.U. eine Alternative.
 
Powermock kann interne instanzierung abfangen ?? das waere ja mal n holy moly dann wert.

Ansonsten gilt - bei dem code entweder damit leben und den renderer schlucken wie er ist, oder umstrukturieren und DI nutzen, so dass du dann in deinem Test einen Mock oder aehnliches reinrichen kannst
 
Powermock kann interne instanzierung abfangen ?? das waere ja mal n holy moly dann wert.
Ja, das kann es: MockConstructor - powermock - PowerMock is a Java framework that allows you to unit test code normally regarded as untestable. - Google Project Hosting

Allerdings ist da auch ein bisschen Aufwand nötig, PowerMock gilt als "der große Hammer", ist auch nciht sehr "schnell" und hat so seine Probleme zB. mit OSGi, alles in allem wäre mir persönlich DI lieber.
 
krass... jetzt wird schlechter code auch noch mit test moeglichkeit belohnt... na ich weiss nicht.

Anstatt an der Krankheitsursache zu machen gibt man einfach ein groesseres Pflaster zur Behandlung.....
 
Danke für die Antworten. Sowas habe ich geahnt. Powermock müssen wir zwar bereits einsetzen (der legacy Code nutzt sehr viele statische Klassen) aber für den Fall hier werde ich sicher nicht Powermock anwerfen 🙂

Ich werde die Renderer per DI mitgeben

Cu
Alex
 

Zurück
Oben