Übung 12 (verfrüht) online

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 » 3. Feb 2008 13:11

und vor allem, wie soll man in einem test mehrere exceptions testen????
Atomenergie ist wie Sex - im Prinzip genial, wenn man nur wüsste wohin mit den Endprodukten.

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 » 3. Feb 2008 14:25

Osterlaus hat geschrieben:Soll die Teilaufgabe 5.2 ausschließlich per assertEquals() gelöst werden?
Wie Dr. Rößling hier geschrieben hat, darf im Falle, dass die Methode nicht mit assertEquals() getestet werden kann,
auch eine Exception gewirfen werden.
Osterlaus hat geschrieben:Für die Funktionen, die eine Exception werfen, habe ich stattdessen @Test(expected=AirplaneException.class) verwendet, obwohl 5.3 ja dann überflüssig wäre. Denn einen Großteil der Funktionen, die eine Exception werfen, habe ich in 5.2 ja schon getestet.
Bei mir ist es so, dass eigentlich nur deleteAirport() in Aufgabe 5.2 mit Exceptions getestet werden muss.
Bei allen anderen Methoden habe ich (mehr oder weniger sinnvolle) Abfragen mit assertEquals() gefunden.

Ich habe meinem Tutor außerdem eine eMail mit der Frage geschickt, ob die von s!mon vorgeschlagene Kombination
von try..catch mit @Test(expected...), um beide Abfragen mit Exceptions testen zu können, akzeptiert wird.
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

Osterlaus
BSc Spammer
BSc Spammer
Beiträge: 1263
Registriert: 23. Aug 2007 12:46
Wohnort: DA

Re: Übung 12 (verfrüht) online

Beitrag von Osterlaus » 3. Feb 2008 16:46

Wir sollen doch in AirborneComputerTest alle Funktionen testen, die wir da eingebaut haben. Und zum Beispiel die Funktion changeHeight wirft bei mir eine Exception, wenn ich die Flughöhe ungültig verändere. DeleteAirport wird eine Exception, wenn ich einen nicht vorhandenen Flughafen löschen will. FlyTo wirft eine Exception. gearDown wirft eine Exception. Und entweder fange ich die in den Testfunktionen ab oder werfe sie weiter nach außen, um bspw. mittels @Test(expected=AirplaneException.class) zu testen. Also muss ich doch in vielen Fällen so prüfen statt mit assertEquals - oder?

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 » 3. Feb 2008 16:57

Ich nehme an, du beziehst dich auf Aufgabe 5.2.
Wenn die Methoden, die du benutzt, Exceptions werfen können, aber es mit deinen Eingaben nicht tun werden,
dann schreibst du diese Exceptions einfach an die Testmethode mittels throws ....
Die Methode flyTo() könntest du ja so testen, dass nach dem Aufruf, sich der Tankinhalt verändert haben muss z.B.
Du brauchst also, obwohl die Methoden Exceptions werfen können, diese nicht selbst zu fangen mittles try...catch.
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

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 » 3. Feb 2008 18:51

Mein Tutor sagte, dass er die Lösung mit try...catch Blöcken wohl akzeptieren würde, dass das
aber keine Garantie ist, dass andere Tutoren es auch akzeptieren würden und deshalb jeder
selbst nachfragen müsste.
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

mcdikki
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 117
Registriert: 22. Okt 2007 17:16
Wohnort: Frankfurt

Re: Übung 12 (verfrüht) online

Beitrag von mcdikki » 9. Feb 2008 02:53

Ich habe das gelöst indem ich zwar mit try catch arbeite, aber trotzdem asser verwende.

Code: Alles auswählen

boolean ExceptionThrown = false;

try {
...mache was die Exception verursacht...;
} catch (ErwarteteException e) {
ExceptionThrows = true;
}

assert(ExceptionThrown);
So kann man auch in einer Methode beliebig viele Exceptions test.
Die letzte mache ich dann aber auch mit @Test (expected = Exception).


Aber irgendwie ist das schon nicht gut durchdacht. Testen sollte ja sinnvoll sein. Man könnte das wirklich schöner lösen als die Test der Exceptions von den Normalen zu lösen. Wenn ich eine Methode teste dann will ich doch alles an ihr testen und nicht nur teile.

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 » 9. Feb 2008 03:00

Wie gesagt: Einfach den jeweiligen Tutor fragen, ob er/sie es so akzeptieren würde.
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

Benutzeravatar
crazy_wuschie
Windoof-User
Windoof-User
Beiträge: 24
Registriert: 15. Okt 2007 18:04

Re: Übung 12 (verfrüht) online

Beitrag von crazy_wuschie » 9. Feb 2008 23:13

Habe hier ein Eclipse-technisches Problem.

Aus welchem Grund sagt mir der Compiler in Eclipse ich müsse die Airplane-/Airport-/AirborneComputerExceptions abfangen beim JUnit Test?

Folgendes Konstrukt:

Code: Alles auswählen

@Test(expected = AirborneComputerException.class)
public void TestflyTo_er(){
   bc.flyTo("Hamburg");  //Hamburg ist nicht im Speicher
}
Anmerkung, bc ist ein mit @Before initalisierter Boardcomputer
Wenn ich keinen try, ctach block einführe und alle Exceptions abfange wird der Test nicht gestartet!

mcdikki
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 117
Registriert: 22. Okt 2007 17:16
Wohnort: Frankfurt

Re: Übung 12 (verfrüht) online

Beitrag von mcdikki » 9. Feb 2008 23:16

Ganz einfach, die Methoden sind mit "throws ExceptionXY" deklariert und daher musst du sie endweder fangen (try catch) oder weiterleiten mit "throws" im methoden Kopf.

lg mcdikki

[EDIT]

In deinem Fall solltest du sie nicht fangen, sonder mit throws weiterleiten, sonst geht dein @Test (expeted = Exception) nicht mehr.

Benutzeravatar
crazy_wuschie
Windoof-User
Windoof-User
Beiträge: 24
Registriert: 15. Okt 2007 18:04

Re: Übung 12 (verfrüht) online

Beitrag von crazy_wuschie » 10. Feb 2008 12:25

Danke.
Ich hab da wohl was verwechselt,
JUnit kümmert sich zwar um die geworfenen Exceptions, aber das heißt ja net dass ich Standard Java-Konstrukte einfach weglassen kann :)

Antworten

Zurück zu „Archiv“