Die Frage scheint zwar beantwortet, aber dennoch will ich das jetzt wissen:
Warum ist ein EventHandler privat? Wenn er privat ist, dann interessiert er mich auch nicht. Wenn ich einen Staubsauger in die Steckdose stecke und auf Power drücke, erwarte ich das er Staub saugt. Der Vertrag zwischen Benutzer und Gerät scheint also eindeutig. Was dieses Ding sonst noch so kann und wie es das anstellt ist mir ehrlich gesagt egal.
Aber nochmal zurück zur Aussage: Der Event ist doch Public, oder? Und der Handler ist dann in meinem Fall eine eigene Methode. Oder meinst du, dass intern in dem SUT ein Event registriert wird und du testen willst ob in dem SUT der private Handler aufgerufen wurde?
Ähmmm.... das geht dich ehrlich gesagt nichts an, da es Interna sind, ausser die Abhängigkeit wird von aussen in den Konstruktor in das SUT gereicht, dann kannst du es Anhand der gemockten Abhängikeit testen.
Beispiel: Meine PomodoroTimer App. Auszug aus der Spezifikation:
und hier die Implementierung:
Von aussen gibts bei dem CountDownTimer zwei Events und die Test ich ob sie aufgerufen warten. Ich teste also kein Interna, sondern erwartetes Verhalten.
Nun ist es aber wichtig zu unterscheiden, auf welcher Ebene du testest?
Ist es ein BlackBox, WhiteBox, GreyBox Test? BlackBox, also mit Mocks ist klare Sache! Finger weg; Internas bleiben solche. Daher heißt es ja auch Blackbox. Bei White oder Greybox ist das was anderes. Da sind wir schon bei Integrationstests. Da dürfen Internas mitgetestet werden. Und hier kommen wir wieder zu unserem aller Lieblings-Pattern: Inversion Of Control. Du kannst nur das Testen, was du von aussen hereingibst (zumindest, wenn du Architektonisch Clean bleiben willst).
Du kannst aber die Profiler API nehmen, oder z.B. TypeMock (keine Ahnung wie das Ding es anstellt) und auch das auseinandernehmen.
Ergo:
Clean Code (gute Architektur)
oder
Dirty Hack (schlechte Architektur)
Das ist meine ganz persönliche Meinung. Wenn du im Brownfield unterwegs bist und dich dreckig machen musst, dann tu es! Nimm jedes ******** Werkzeug, dass du nur bekommen kannst um die Schwerverbrechen, die deine Erblasser verbrochen haben unter Kontrolle zu bekommen.
Ansonsten bleib Clean und Teste Public.
Vor allem stelle ich zur Diskussion, was passiert, wenn sich Internas ändern, aber die öffentliche Schnittstelle nicht?
Mich interessiert nicht das wie, sonder das was bei einem Vertrag. Ob die Firma Rumänisch kann um mit outgesourcten Angestellten zu sprechen ist mir egal und ich werde es nicht prüfen. Ob die Firma ihren Arbeitern Pizza und Cola spendiert, damit die ihre Arbeit auch richtig machen, interssiert mich auch nicht.
Was mich aber interessiert ist, was am Ende des Vertrages als Leistung erbracht wurde. Naja und so sehe ich das Verhältniss zwischen zwei Klassen auch. Contract First! und was sonst so im privaten abgeht .... hauptsache sie tut, was sie soll.
my 2 cnt.
P.S.: Frag dich dein Cheff, was du daheim in deinem Bett anstellst? Oder ist er zufrieden, wenn er zum Schluss das von dir bekommt, was ihr ausgemacht habt
