Übung 12 (verfrüht) online

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Re: Übung 12 (verfrüht) online

Beitrag von Krümelmonster » 28. Jan 2008 14:02

ist es aber wohl auch nicht schlimm
Ich nehme an, das bezieht sich auf meine erste Frage.
Also kann die AirplaneTest Klasse wohl doch nicht leer bleiben. ;)

//edit
In Aufgabe 5.2 sollen also alle Abfragen mittels assertEquals() implementiert werden,
während in Aufgabe 5.3 die Abfragen mit @Test(expected = ...) implementiert werden sollen!?

//edit2
Gilt es auch als Abfrage, wenn man einfach nur Methoden aufruft und dann sagt:
Wenn es nicht ginge, dann würde eine Exception geworfen werden?
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

Benutzeravatar
guido
Computerversteher
Computerversteher
Beiträge: 378
Registriert: 30. Nov 2003 21:24
Wohnort: Mühltal
Kontaktdaten:

Re: Übung 12 (verfrüht) online

Beitrag von guido » 28. Jan 2008 15:43

Krümelmonster hat geschrieben: In Aufgabe 5.2 sollen also alle Abfragen mittels assertEquals() implementiert werden,
während in Aufgabe 5.3 die Abfragen mit @Test(expected = ...) implementiert werden sollen!?
Das ist kein Widerspruch! Auch im Fall von Exceptions kann das Ergebnis mit "assertEquals" getestet werden, nur dass man hier an sich schon davon ausgehen sollte, dass das Ergebnis eine Exception ist.
Krümelmonster hat geschrieben: Gilt es auch als Abfrage, wenn man einfach nur Methoden aufruft und dann sagt:
Wenn es nicht ginge, dann würde eine Exception geworfen werden?
Naja, eher nicht...

Guido

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Re: Übung 12 (verfrüht) online

Beitrag von Krümelmonster » 28. Jan 2008 15:49

D.h. es kann z.B. auch so auf Exceptions getestet werden?
assertEquals(setLocation("Budapest"), AirborneComputerException);

Dann würde es allerdings möglich sein, zwei Abfragen hintereinander zu
schreiben, wobei beide eine Exception werfen können...

//edit
Wie soll ich eigentlich mit assertEquals() die Methode
deleteAirport() testen? Wenn sie funktioniert, gibt sie
ja nichts zurück.

Und mit assertEquals() kann man wohl nicht auf Exceptions testen
(oder ich weiß einfach nicht wie).
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

sge
Mausschubser
Mausschubser
Beiträge: 80
Registriert: 3. Okt 2007 10:49
Wohnort: Darmstadt

Re: Übung 12 (verfrüht) online

Beitrag von sge » 28. Jan 2008 18:35

genau vor den gleichen Problemen steh' ich auch Krümelmonster.

Mal eine allgemeine Frage zum Testen:
Soll man bei Testen auch in Lage gezwungen werden,
die zu testende Klasse mit verschiedenen Methoden zu erweitern,
nur damit man die Tests durchführen kann?

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Re: Übung 12 (verfrüht) online

Beitrag von Stumpf.Alex » 28. Jan 2008 19:49

Unabhängig von der Übung meine Antwort: Soweit wie ich mich erinnern kann, gab es zum Thema testen den Stichpunkt Testtreiber, der beinhaltet eine Testumgebung für das zu testende Programm zu schaffen. Außerdem halte ich das im beschränkte Maße sinnvoll, da man ja so früher den Code testen kann, was ja in der Vorlesung als wünschenswert angesehen wurde.

Benutzeravatar
guido
Computerversteher
Computerversteher
Beiträge: 378
Registriert: 30. Nov 2003 21:24
Wohnort: Mühltal
Kontaktdaten:

Re: Übung 12 (verfrüht) online

Beitrag von guido » 29. Jan 2008 10:25

Krümelmonster hat geschrieben:D.h. es kann z.B. auch so auf Exceptions getestet werden?
assertEquals(setLocation("Budapest"), AirborneComputerException);

Dann würde es allerdings möglich sein, zwei Abfragen hintereinander zu
schreiben, wobei beide eine Exception werfen können...
Ja, man kann mehreres auf einmal testen. Allerdings kriegt man (außer bei passender Fehlermeldung der Exception) auf die Art nicht heraus, woher die (erwartete?) Exception kam. Hier muss man also abwägen.
Krümelmonster hat geschrieben: Wie soll ich eigentlich mit assertEquals() die Methode deleteAirport() testen? Wenn sie funktioniert, gibt sie ja nichts zurück.
Das geht mir assertEquals entsprechend nicht. Tipp: wenn ich zu vorher gelöschten Flughafen fliegen will, sollte eine Exception kommen.

Guido

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Re: Übung 12 (verfrüht) online

Beitrag von Krümelmonster » 29. Jan 2008 16:56

Ja, man kann mehreres auf einmal testen. Allerdings kriegt man (außer bei passender Fehlermeldung der Exception) auf die Art nicht heraus, woher die (erwartete?) Exception kam. Hier muss man also abwägen.
Allerdings ist es die einzige Möglichkeit (oder jedenfalls die in der Übung erwünschte) Methode, um
zwei Methoden, die beide eine Exception werfen, hintereinander in einer einzigen Testmethode
testen zu können, oder?

Dann wollte ich noch auf Fehler auf den Folien 79, 80 und 81 in Foliensatz T19 hinweisen:

Code: Alles auswählen

Folie 79: assertEquals(calculator.getResult(), 2)
Folie 80:
assertEquals(calculator.getResult(), 8);
...
assertEquals(calculator.getResult(), 5);
Folie 81: assertEquals(calculator.getResult(), 100);
assertEquals ist so definiert, dass zuerst der Erwartungswert und dann die zu testende Methode aufgerufen wird.
Also müssten die Parameter getauscht werden (wie auf Folie 86):

Code: Alles auswählen

assertEquals(4, calculator.getResult());
Des weiteren würde mich mal interessieren, wie genau ich mit assertEquals() Exceptions abfangen kann.
Folgendes habe ich bisher versucht:
In der CalculatorTest.java (aus dem Testarchiv des Calculators von der Veranstaltungsseite) habe ich in der
divideByZero() Methode das calculator.divide(0); ersetzt durch assertEquals(ArithmeticException, calculator.divide(0));.
Allerdings mit dem Hinweis: ArithmeticException cannot be resolved
Auch ein import java.lang.ArithmeticException; am Anfang der Datei hat den Hinweis nicht geändert.
In den Folien habe ich dazu leider nichts gefunden.
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Re: Übung 12 (verfrüht) online

Beitrag von Stumpf.Alex » 29. Jan 2008 18:03

Des weiteren würde mich mal interessieren, wie genau ich mit assertEquals() Exceptions abfangen kann.
Ganz einfach:

Code: Alles auswählen

try {
.....
assertEquals(0,0);
}
catch(...) {
...
assertEquals(0,1);
}
assertEquals ist so definiert, dass zuerst der Erwartungswert und dann die zu testende Methode aufgerufen wird.
Wo wird das definiert? Eigentlich ist es doch egal, ob du squareRoot(2)==4 oder 4==squareRoot(2) testest. Und ich habe bis jetzt nirgends etwas gefunden, bei dem man sich direkt von assertsEqual anzeigen lassen kann, welcher Wert falsch war.

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Re: Übung 12 (verfrüht) online

Beitrag von Krümelmonster » 29. Jan 2008 18:45

Stumpf.Alex hat geschrieben: Ganz einfach:

Code: Alles auswählen

try {
.....
assertEquals(0,0);
}
catch(...) {
...
assertEquals(0,1);
}
Antwort
assertEquals ist so definiert, dass zuerst der Erwartungswert und dann die zu testende Methode aufgerufen wird.
Wo wird das definiert? Eigentlich ist es doch egal, ob du squareRoot(2)==4 oder 4==squareRoot(2) testest. Und ich habe bis jetzt nirgends etwas gefunden, bei dem man sich direkt von assertsEqual anzeigen lassen kann, welcher Wert falsch war.
Wenn ein Test fehlschlägt, dann steht links: expected ... but was ...
Ausßerdem steht es so in der Doc.
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

Benutzeravatar
guido
Computerversteher
Computerversteher
Beiträge: 378
Registriert: 30. Nov 2003 21:24
Wohnort: Mühltal
Kontaktdaten:

Re: Übung 12 (verfrüht) online

Beitrag von guido » 29. Jan 2008 20:16

Krümelmonster hat geschrieben: Des weiteren würde mich mal interessieren, wie genau ich mit assertEquals() Exceptions abfangen kann.
Sie sollen nicht "abgefangen", sondern willentlich verursacht werden durch entsprechende Abrufe. Statt "log2(-10)" kann ich entsprechendes auch mit "deleteAirport" machen, indem ich einen mir bekannt nicht vorhandenen Flughafen lösche - oder einen vorher gelöschten als Ziel nutze. Diese Methoden -- auch ganz ohne "assertEquals"! -- sollten dann mit @Test(expected=ExceptionTyp.class) "gefangen" werden.

Der Versuch mit dem Klassennamen scheitert so, weil nur Objekte genutzt werden können, keine Klassennamen. Wichtig in dem Kontext: bei "expected=" ist der Name als "ExceptionName.class" anzugeben, also nicht "ArithmeticException", sondern "ArithmeticException.class".

Guido

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Re: Übung 12 (verfrüht) online

Beitrag von Krümelmonster » 29. Jan 2008 20:58

Ok, ich versuche nochmal meine ursprünglichen Probleme zu erläutern.

1. In Aufgabe 3 sollen wir die Exceptions der Methoden testen. Daraus schließe ich, dass wir in Aufgabe 2 die Methoden nur mit assertEquals() testen sollen.
Da ich aber deleteAirport() z.B. nur über die Exception von flyTo() testen kann, wäre das ein Widerspruch. Das bringt mich zu einem allgemeineren Problem.

2. In Aufgabe 3 sollen die Exceptions mit zwei Abfragen in einer Testmethode getestet werden. Sobald aber die erste Abfrage wie erwartet eine Exception
geworfen hat, die mit @Test(expected = ...class) gefangen wurde, wird danach die zweite Abfrage nicht mehr ausgeführt.
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

Benutzeravatar
Jo(h)nny
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 197
Registriert: 19. Dez 2007 23:39

Re: Übung 12 (verfrüht) online

Beitrag von Jo(h)nny » 29. Jan 2008 23:40

müssen wir die hilfsprozeduren testen??(hoffentlich nicht:))
Atomenergie ist wie Sex - im Prinzip genial, wenn man nur wüsste wohin mit den Endprodukten.

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Re: Übung 12 (verfrüht) online

Beitrag von Stumpf.Alex » 30. Jan 2008 00:05

In der Aufgabe 2 heißt es:
Hausübung 12 hat geschrieben:Testen Sie auch ihre eigene Merhoden.
Falls du das meinst. Ansonsten halt alle Methoden, wie sie in der Hausübung aufgezählt werden.

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Re: Übung 12 (verfrüht) online

Beitrag von Stumpf.Alex » 30. Jan 2008 01:48

Ja ich frage mich auch noch wie man eine setter Methode unabhängig einer getter Methode testen kann...wie z.B. bei setAirplane und getAirplane (soll ja laut Übung mit je zwei eigenen Tests geprüft werden).

Ich kann ja nur setAirplane testen, wenn ich mit getAirplane abfrage, ob das richtige Flugzeug abgespeichert wurde (aufgrund der Verkapselung kann ich ja nicht direkt auf das Flugzeugobjekt des Bordcomputers zugreifen). Aber dabei teste ich ja eher getAirplane bzw. der Test für getAirplane wäre ja das gleiche Schema, weshalb ich mich frage, wie man da jetzt die beiden Methoden, wie in der Übung erwünscht SINNVOLL differenziert testet?

Vor allem wird ja in der Übung 11 nicht verlangt, dass man Exceptions für set- und getAirplane auswirft..und da, wie von Krümelmonster genannt, ich die Aufgabe 2 genauso interpretiere, dass alle Tests mit assertEquals gemacht werden soll, frag ich mich um so mehr wie man das sinnvoll testen soll? Oder habe ich da etwas übersehen?

Benutzeravatar
Jo(h)nny
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 197
Registriert: 19. Dez 2007 23:39

Re: Übung 12 (verfrüht) online

Beitrag von Jo(h)nny » 30. Jan 2008 10:42

nun ich hab jetzt bei fast jeder methode eine exception überprüft(also z.b. 2 mal ob die richtig funktioniert und 1 mal, ob sie die entsprechende exception wirft)
und die frage ist so gemeint, ich hab da eine methode, die sprit berechnet, und da wäre es nun wirklich überflussig 3 test zu dieser methode zu machen:)

aso fast vergessen, ich glaub nicht, dass man set methode ohne get-methode testen kann, und guido hat doch geschrieben, dass man deleteAirport über flyTo testen kann, also...:)
Atomenergie ist wie Sex - im Prinzip genial, wenn man nur wüsste wohin mit den Endprodukten.

Antworten

Zurück zu „Archiv“