Übung 10, Task 2

marluwie
Mausschubser
Mausschubser
Beiträge: 99
Registriert: 18. Okt 2005 22:33

Was soll getestet werden?

Beitrag von marluwie »

Ich habe auch noch Fragen. Was soll eigentlich getestet werden? Ich nehme an, dass wir in den Dateien EmailerTest.java und TextEditorTest.java jeweils die Manual-, Builder- und Guice-Variante testen sollen, rischtisch?

Sollen wir im TextEditorTest sowohl den englischen als auch den japanischen Editor testen?

Dürfen wir keine MockUps, TestSpys, Dummies, ... benutzen? Die Aufgabenstellung und die Beiträge hier sind diesbezüglich ein wenig verwirrend.

Und wenn ich schon mal am Fragen bin: Wie wurde in den Framework-Folien auf Folie 54 (53 im Adobe Reader) tweeter im Test Case an das private Feld im tweetClient-Objekt gebunden? Gibt es da irgendeinen unterschlagenen Getter-Aufruf? Oder gibt es noch andere Möglichkeiten? Was bringt Guice für 's Testen, wenn ich Objekte "injecte", an die ich dann nicht mehr dran komme? Im Endeffekt führt das doch dazu, dass ich meine privaten Felder mindestens über Getter offen legen muss, oder?
"You can't change anything by fighting or resisting it. You change something by making it obsolete through superior methods." (Buckminster Fuller)

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Re: Übung 10, Task 2

Beitrag von marcel_b »

> Die Aufgabenstellung und die Beiträge hier sind diesbezüglich ein wenig verwirrend.

Welche Teile der Aufgabestellung bzw. Forumposts ziehst du denn gerade heran?

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Re: Was soll getestet werden?

Beitrag von marcel_b »

Unabhängig von der anderen Frage:
marluwie hat geschrieben:Dürfen wir keine MockUps, TestSpys, Dummies, ... benutzen?
Warum solltet ihr nicht Mocks oder Testspys benutzen dürfen? Es würde wohl schwer/unnötig schwer sein bestimmte Pfade im System testen, wenn man diese Hilfsmittel nicht anwenden dürfte.

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Re: Was soll getestet werden?

Beitrag von marcel_b »

marluwie hat geschrieben:Und wenn ich schon mal am Fragen bin: Wie wurde in den Framework-Folien auf Folie 54 (53 im Adobe Reader) tweeter im Test Case an das private Feld im tweetClient-Objekt gebunden? Gibt es da irgendeinen unterschlagenen Getter-Aufruf? Oder gibt es noch andere Möglichkeiten? Was bringt Guice für 's Testen, wenn ich Objekte "injecte", an die ich dann nicht mehr dran komme? Im Endeffekt führt das doch dazu, dass ich meine privaten Felder mindestens über Getter offen legen muss, oder?

Ich verstehe die Frage noch nicht. Tweeter wurde im Module eine Folie vorher definiert und wird per Constructor Injection von Guice erzeugt und an TweeterClient übergeben. Kannst du deine Frage nochmal erläutern?

> Was bringt Guice für 's Testen, wenn ich Objekte "injecte", an die ich dann nicht mehr dran komme?

Es kommt darauf an, wofür die Guice verwendest bzw. was du testen möchtest. Bei einem Mock ist es dir egal, da der einfach eine Exception bei ungültiger Benutzung wirft. Bei indirekten Inputs ist es dir auch egal. Bei einem Testspy nicht mehr. Da benötigst du die Referenz auf den Spy.

Wenn man in den DI und Guice Büchern ein wenig weiter liest, möchten Sie eigentlich auch, dass man Guice nicht für das Testen verwendet, sondern hier manuell die Abhängkeiten übergibt. Also selbst das Mock erzeugt bzw. den Spy übergibt. Das sollte ihrer Meinung nach ganz einfach gehen, da ja sowieso alles "total gut modularisiert ist". Das hängt aber wohl von einer Reihe von Faktoren ab und zur Illustration war das Beispiel selbst für Google Entwickler "gut genug".

marluwie
Mausschubser
Mausschubser
Beiträge: 99
Registriert: 18. Okt 2005 22:33

Re: Übung 10, Task 2

Beitrag von marluwie »

Ups... Sorry, ich meine:

"Entwerfen Sie ein geeignetes Builder Interface und geben Sie zwei Implementierungen (für Emailer in „english“ und in „simple Japanese“) an." aus der Aufgabenstellung. Ok... Den Builder erstelle ich gerne. Aber brauchen würde ich ihn nicht.
marcel_b hat geschrieben:
CloneCommander hat geschrieben: Zusätzlich möchte ich noch fragen, ob bei der Implementierung mit Guice das eine Beispiel in der vorgegebenen Klasse mit dem EnglishTextEditor und einem MailServer unserer Wahl ausreicht?
Das Erstell bzw. das Module für SimpleJapanese wird dich wohl nicht vor nennenswerte Herausforderungen stellen, oder ? Sind es mehr als zwei Zeilen ?
Mir ist hier generell nicht klar, was mit "Implementierung mit Guice" gemeint ist. Später ist noch die Rede davon die Main-Methode zum Laufen zu kriegen.

Ich denke es ist sehr einfach möglich den DefaultEmailer zu testen. Für diese Klasse machen auch die drei Schritte manual, builder und guice Sinn. Aber an dieser Stelle brauche ich die English- und SimpleJapanese-EmailerBuilder nicht. Ich denke der Beitrag von CloneCommander bezieht sich auf die Builder. Hier hat man schließlich das Problem, dass der Mail Server unabhängig von einer Sprache ist. Aber im Guice-Teil werden die Builder quasi per Aufgabenstellung nicht mehr benötigt. Wie in Übung 1 bereits vorgestellt, würde ich das SUT testen, indem ich Mock Ups oder Test Spys benutze. In diesem Fall hat Guice nichts mehr mit einem EnglishTextEditor zu tun, weil ja DefaultEmailer mein SUT ist.

Bei der vorgegebenen Datei TextEditorTest, habe ich keine Ahnung, was wir testen sollen. Macht da Injektion mit Guice überhaupt Sinn? Ist es ausreichend, wenn wir den DefaultEmailer mit manual, builder und guice und dann das restliche System nur noch mit Guice oder manuell testen?
"You can't change anything by fighting or resisting it. You change something by making it obsolete through superior methods." (Buckminster Fuller)

marluwie
Mausschubser
Mausschubser
Beiträge: 99
Registriert: 18. Okt 2005 22:33

Re: Was soll getestet werden?

Beitrag von marluwie »

marcel_b hat geschrieben:
marluwie hat geschrieben:Und wenn ich schon mal am Fragen bin: Wie wurde in den Framework-Folien auf Folie 54 (53 im Adobe Reader) tweeter im Test Case an das private Feld im tweetClient-Objekt gebunden? Gibt es da irgendeinen unterschlagenen Getter-Aufruf? Oder gibt es noch andere Möglichkeiten? Was bringt Guice für 's Testen, wenn ich Objekte "injecte", an die ich dann nicht mehr dran komme? Im Endeffekt führt das doch dazu, dass ich meine privaten Felder mindestens über Getter offen legen muss, oder?
Ich verstehe die Frage noch nicht. Tweeter wurde im Module eine Folie vorher definiert und wird per Constructor Injection von Guice erzeugt und an TweeterClient übergeben. Kannst du deine Frage nochmal erläutern?
In der Folie vorher wird das TweetTestModule definiert und das Interface Tweeter an MockTweeter gebunden. Wenn nun injector.getInstance(TweetClient.class) aufgerufen wird, erzeugt Guice aufgrund der Bindung ein Objekt von MockTweeter und übergibt dieses an der richtigen Stelle im Konstruktor von TweetClient. Auf der Folie mit dem Test Case wird nun der TweetClient auf diese Weise erzeugt. In der assertEquals wird ein tweeter benutzt. Woher kommt der? Wenn die Methode ein Teil vom Mock-Objekt ist, würde da ja eher this.getSent() stehen. Wenn die Methode nicht im Mock-Objekt ist, ist tweeter eher ein TestSpy. Da der Spy per Injektion erzeugt wurde, dürfte er eigentlich nicht im Test Case bekannt sein.
"You can't change anything by fighting or resisting it. You change something by making it obsolete through superior methods." (Buckminster Fuller)

Antworten

Zurück zu „Archiv“