Private Methoden aus Testklasse ansprechen
-
Servus,
ich habe eine Klasse Geheim mit der privaten Methode ichMachWasTolles(). Jetzt habe ich eine Klasse TestSuite mit der Methode ichWillIchMachWasTollesTesten().
Wenn ich jetzt die Methode ansprechen will, müsste ich ja die Kapselung aufbrechen, gibt es in C++ vielleicht eine Option, dass ich die ichMachWasTolles() als private lassen kann aber trotzdem einen Test von außen erlauben kann?
-
friend?
-
Du willst "ichmachwastolles" nicht direkt testen. Du willst die Klasse als Black Box testen, d.h. so wie sie mit dem Rest deines Systems interagiert. Was sie privat macht ist nicht ohne Grund Privatsache und hat nichts im Test zu suchen.
-
Das ist der Sinn der OOP. Wenn du deine Klassen nicht kapseln kannst ist das, wie in diesem Falle, ein Designfehler. Falls es dennoch nicht anders geht, ist die schönste Lösung wohl die Klasse zu erben.
-
Kóyaánasqatsi schrieb:
Das ist der Sinn der OOP. Wenn du deine Klassen nicht kapseln kannst ist das, wie in diesem Falle, ein Designfehler.
Wieso das?!? Die Kapselung funktioniert ja, es geht ihm nur darum, die Funktion einer einzelnen, privaten Methode zu testen - und das hat nichts mit "Designfehler" zu tun!
Falls es dennoch nicht anders geht, ist die schönste Lösung wohl die Klasse zu erben.
Vielleicht "eine Klasse beerben", oder halt einfach davon ableiten.
Außerdem...
Genau, du weißt wovon du sprichst. Abgeleitete Klassen haben Zugriff auf private Member.BTT:
Bei den Tests lässt du hoffentlich einen Debug-Build laufen. Dort kannst du dann entsprechende assertions einbauen, die dir ein korrektes Funktionieren zusichern. Ansonsten interessiert dich nur das öffentliche Interface.