Protected Methoden mit DUnit testen

Über das Testen von privaten Methoden kann man sich streiten. Ich persönlich halte das in den allermeisten Fällen für überflüssig und nicht zielfördernd. Ganz anders sieht die Lage bei protected Methoden aus. In den meisten Fällen werden protected Methoden erstellt, um Erben dieser Klasse mit Grundfunktionalität zu versorgen. Und diese Grundfunktionaltität sollte auch getestet werden.

Delphi hat die Eigenart, dass Klassen, die in einer Datei deklariert sind, sich gegenseitig in die Karten bzw. in die protected und sogar private Methoden und Variablen gucken können. Was auch immer man davon halten mag, aber das ist der Weg, wie ich protected Methoden testen kann.

Bisher habe ich mir im Testcode meist einen Erben der zu testenden Klasse erstellt. Die Tests liefen dann immer gegen diesen Erbern, damit ich Zugriff auf die protected Methoden habe. Das sah dann in etwa so aus:

MeineSuperklasse.pas:

MeineSuperklasseTests.pas:

Das hat den Nachteil, dass die Testfälle das Benutzen der zu testenden Klasse nicht sonderlich gut dokumentieren. Weil dort TMeineTestbareSuperKlasse.Create anstatt TMeineSuperKlasse.Create steht.

Entwickler, die nach einem Anwendungsbeispiel meiner Klasse suchen, werden die Testfälle nicht finden. Besser wäre es, wenn auch die Testfälle mit TMeineSuperklasse.Create arbeiten könnten.

Und genau dafür habe ich durch Zufall eine Lösung gefunden.

In der Datei, die die Testfälle enthält wird die zu testende Klasse nicht mit neuem, sondern den originalen Namen deklariert. Die so deklarierte Klasse wird dann in den Testfällen verwendet und erlaubt auch den Zugriff auf die protected Methoden.

MeineSuperklasseTests.pas:

Das sieht für mich schon besser aus, als das obere Beispiel.

Protected Methoden mit DUnit testen
Markiert in:                    

Kommentar verfassen