Seite 3 von 4

Re: Übung 12 (verfrüht) online

Verfasst: 30. Jan 2008 10:48
von Stumpf.Alex
Ja das ist ja klar und nicht das Problem. Mir gehts echt darum, was die von mir in der Hausübung wirklich wollen, in der es heißt für setAirport und getAirport jeweils zwei Tests zu machen?
Hausübung 12 hat geschrieben:"Schreiben Sie dazu die folgenden JUnit-Tests. In AirborneComputerTest reicht es, wenn Sie für die Methoden ... setAirplane() und getAirplane() jeweils zwei sinnvolle Abfragen..."

Re: Übung 12 (verfrüht) online

Verfasst: 30. Jan 2008 11:18
von Jo(h)nny
es geht ja gar nicht, dass du set ohne get testest, du kannst ja auf das flügzeug nur über get methode zugreifen, also wie willst du sonst überprüfen, ob du das flugzeug richtig gesettet hast??? oder meinst du was anderes??
also 2 tests, heisst 2 abfragen(glaube ich):)

Re: Übung 12 (verfrüht) online

Verfasst: 30. Jan 2008 11:22
von Jo(h)nny
was mich ma interessiren würde: wie könnte man 3 sinnvolle Tests für toggleAutoPilot() gestalten???? hm.... also man kann ihn ja ma einschalten, ausschalten, und dann noch ma einschalten :mrgreen:

Re: Übung 12 (verfrüht) online

Verfasst: 30. Jan 2008 12:10
von Stumpf.Alex
Jo(h)nny hat geschrieben:es geht ja gar nicht, dass du set ohne get testest, du kannst ja auf das flügzeug nur über get methode zugreifen, also wie willst du sonst überprüfen, ob du das flugzeug richtig gesettet hast??? oder meinst du was anderes??
also 2 tests, heisst 2 abfragen(glaube ich):)
Ganz simple, der Test für die getter Methode wäre der selbe für eine setter Methode und das finde ich total widersprüchig in der Hausübung, dass man da halt zwischen den Tests von setAirport und getAirport differenziert.
Jo(h)nny hat geschrieben:was mich ma interessiren würde: wie könnte man 3 sinnvolle Tests für toggleAutoPilot() gestalten???? hm.... also man kann ihn ja ma einschalten, ausschalten, und dann noch ma einschalten :mrgreen:
Das ist noch so ein irrer Widerspruch in der Hausübung... :?

Re: Übung 12 (verfrüht) online

Verfasst: 30. Jan 2008 12:21
von Jo(h)nny
aso, jo hab einfach kopiert, eine zeile hinzugefügt und das wars eigentlich:)

@Krümmelmonster, hab das gleiche problem bei 3, also da steht ja wir sollen alle exceptions testen. Wenn man das jetzt in einer methode schreiben müsste, kann man das irgendwie mit @Test(expected = blabla.class, blablabla.class) oder irgendwie anders, aber so dass er nach der 1. exception den code weiterdurchläuft???


hmmmmmmm......... hab keine Methoden in Airplane ausser get und set:), müssen wir den konstruktor testen???

Re: Übung 12 (verfrüht) online

Verfasst: 30. Jan 2008 14:20
von Krümelmonster
Ich habe es jetzt so gemacht, dass bei Aufgabe 2 deleteAirport() auch mit Exceptions geprüft wird und bei Aufgabe 3
zwar zwei Abfragen in einer Testmethode stehen, wobei immer nur die erste abgefragt und eine Exception wirft, wodurch
die Testmethode verlassen wird.
Schreiben Sie für jede Methode, die eine oder mehrere Exceptions erzeugen kann, einen weite-
ren Test mit je zwei Abfragen, der überprüft, ob die Exception(s) wie erwartet geworfen wird
beziehungsweise werden.
Auf welche Klassen bezieht sich diese Anweisung?

Re: Übung 12 (verfrüht) online

Verfasst: 31. Jan 2008 10:15
von guido
Krümelmonster hat geschrieben:Ich habe es jetzt so gemacht, dass bei Aufgabe 2 deleteAirport() auch mit Exceptions geprüft wird und bei Aufgabe 3
zwar zwei Abfragen in einer Testmethode stehen, wobei immer nur die erste abgefragt und eine Exception wirft, wodurch
die Testmethode verlassen wird.
Schreiben Sie für jede Methode, die eine oder mehrere Exceptions erzeugen kann, einen weite-
ren Test mit je zwei Abfragen, der überprüft, ob die Exception(s) wie erwartet geworfen wird
beziehungsweise werden.
Auf welche Klassen bezieht sich diese Anweisung?
Auf die Klassen, die genau solche Methoden enthalten... (also potenziell fast alle)

Guido

Re: Übung 12 (verfrüht) online

Verfasst: 31. Jan 2008 12:03
von Krümelmonster
Ok, Danke.

Ich nehme mal an, dass meine Art die Exceptions zu testen so erwünscht/akzeptiert wird.
Auch wenn dadurch der zweite Testfall, der eine Exception wirft nie erreicht wird?!

Re: Übung 12 (verfrüht) online

Verfasst: 31. Jan 2008 19:25
von s!mon
Wie testet ihr addAirport()? Ich meine man kann ja gar nicht überprüfen, ob der die Daten so übernommen hat wie man wollte, oder? Nur ob alles "fehlerfrei" geklappt hat. Es könnte ja auch sein, dass man beim hinzufügen x und y Werte vertauscht. Sowas kann man aber gar nicht prüfen oder?

@Krümel: Ich habe das so gemacht

Code: Alles auswählen

	@Test(expected=AirplaneException.class)
	public void testSetHeightException() throws AirplaneException {
		try {
			plane.setHeight(-1000); // First illegal argument
		} catch (AirplaneException e) {
			plane.setHeight(70000000); // Second illegal argument
		}
		// JUnit should never reach this point
	}
Wenn der erste Befehl keine Exception verursacht schlägt der Test fehl, ansonsten geht er in den Catch-Block. Wenn dort eine Exception verursacht wird ist der Test bestanden, ansonsten nicht.. hatte Stumpf.Alex glaube ich auch schon mal geschrieben irgendwo.

Re: Übung 12 (verfrüht) online

Verfasst: 31. Jan 2008 19:34
von Osterlaus
Ich füge einen hinzu und teste dann mittels meiner Funktion airportInList(airport), ob er eingefügt ist.

Re: Übung 12 (verfrüht) online

Verfasst: 31. Jan 2008 19:37
von Stumpf.Alex
Stumpf.Alex hat geschrieben: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?
Ja. Dieses echt mir immer noch PARADOXE Problem (das gleiche gilt für 3 Tests der toggleAutopilot Methode) ist immer noch nicht gelöst...selbst mein Tutor konnte mir da nicht helfen und meinte, dass er das im moment genauso sinnfrei sieht. Er konnte auch nicht in die Musterlösung spicken, um sich ein Überblick zu schaffen, wie wohl die Aufgabe gemeint sein könne und was man da wohl erwartet....mom....noch nicht mal die Musterlösung ist vor erscheinen der Aufgabe da?!? wtf? :shock:

Re: Übung 12 (verfrüht) online

Verfasst: 31. Jan 2008 20:12
von s!mon
Osterlaus hat geschrieben:Ich füge einen hinzu und teste dann mittels meiner Funktion airportInList(airport), ob er eingefügt ist.
So eine Funktion habe ich halt nicht. Ist das nicht irgendwie zweckentfremdet eine Methode dann zu schreiben, die man nur für die Tests braucht? Ich werde wohl einen Getter-Schreiben, der mir meine Airports einfach zurückgibt und dann mit dieser Liste arbeiten.. ist das zulässig?

Was meinen die mit "Testen Sie auch ihre eigenen Methoden"? Ich meine, meine Hilfsmethoden sind private und können ja so gar nicht getestet werden. Soll ich die nur wegen den Tests publich machen? Wäre ja denke ich nicht im Sinne der Kapselung ;)

Naja für heute die Schnauze voll, jetzt erstmal auf die Fastnacht ;)

Re: Übung 12 (verfrüht) online

Verfasst: 31. Jan 2008 20:31
von Krümelmonster
Also ist es doch zulässig, dass try...catch Blöcke verwendet werden, denn Dr. Rößling hat
gesagt, dass @Test(expected ...) verwendet werden soll, was aber in der Lösung von s!mon auch der Fall ist.

Re: Übung 12 (verfrüht) online

Verfasst: 2. Feb 2008 15:29
von Mojito Mix
kann man dieses @Test(expected=CException.class) auch so schreiben:

@Test
public void testB() {
try{
test.B();
fail("Should have raised an CException");}
catch (CException excep){System.out.println(excep.getMessage());}
}

also mit dem fail. dieser test gib ein grünes häckchen, wenn die eine exception auftritt und wenn nicht, dann schlägt der test fehl. gehört das dann zur aufgabe Nummer 3 oder 2? Dürfen wir jetzt bei der Aufgabe 2 keine Exceptions testen, weil in Aufgabe 3 wirds ja direkt so gefordert.

Re: Übung 12 (verfrüht) online

Verfasst: 3. Feb 2008 12:57
von Osterlaus
Krümelmonster hat geschrieben: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.
Ich hol das mal wieder hoch, denn ich stehe gerade vor demselben Problem. Soll die Teilaufgabe 5.2 ausschließlich per assertEquals() gelöst werden? Wenn ja: Wie? assertEquals(funktion(), Exception) schlägt mit der von Krümelmonster ja schon geposteten Fehlermeldung fehl. 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.