Delphi-Quellcode:
Procedure TFoo.PublicMethodToTest;
var
list : TSomeList;
Begin
list := PrivateLoaderOfTheList();
for item in list do PrivateModifierOfItem(item);
PrivateSaveTheList();
End;
Klar, ich kann die Liste von außen übergeben. Klar. Ich kann die Liste auch selbst speichern. Aber -verdammt- so lautet der Auftrag und die Spezifikation. "Die Methode lädt eine Liste, modifiziert die Elemente nach Schema F und speichert sie wieder ab".
Wäre doch viel einfacher, wenn ich den 'PrivateModifierOfTheItem' testen könnte. Das der das für alle Elemente einer Liste macht, sieht ein Blinder mit nem Krückstock (<= Legitimer Pragmatismus). Wenn alle Methoden halbwegs sichbar sind, kann ich die vielleicht sogar mocken und spar mir den Pragmatismus mit einem 5-Zeiler.
Soll ich nun den 'PrivateModifierOfTheItem' in eine extra Klasse auslagern, nur damit man den Testen kann? Ist doch bescheuert und außerdem wären wir dann wieder bei der prozeduralen Programmierung, die eigentlich seit 25 Jahren out ist. Ich glaube, hier ist die Frage des TE berechtigt.
Ich würde diese Methode 'PrivateModifierOfItem' protected machen, einen TestklassenWrapper deklarieren, der die Methode public macht und das dann über den Testwrapper testen. Nicht 100% clean, weil ja der TestWrapper getetstet wird und nicht die Klasse selbst, aber das ist ok.