mit der fail()-Methode der Assert-API kann man abtesten ob ein Aufruf fehlschläft. Wie kann ich das gegenteil abtesten: also dass während der Ausführung einer konkreten Methode keine Exception geworfen wird.. Es muss nichts mehr abgetestet werden. Die Methode liefert auch ncihts zurück.
schwieriger wirds nur dann, wenn der zu testende Code die Exception abfängt und gütig weitermacht. Dann ists nicht einfach überprüfbar ob diese Exception geworfen wurde.
Ich hoffe mal das ist aber schon gar nicht der Fall, daher siehe die beiden Antworten oben
ich finde es aber dass es kein guter Stil ist, wenn eine Testmethode keine assert-Methode hat. So wie jetzt (also ich habe den Test übernommen). Gut ich prüfe nun die Auswirkungen des Aufrufes.
ich finde es aber dass es kein guter Stil ist, wenn eine Testmethode keine assert-Methode hat. So wie jetzt (also ich habe den Test übernommen). Gut ich prüfe nun die Auswirkungen des Aufrufes.
Das ist so falsch, mit Mockobjekten zB. braucht man auch kaum (wenn überhaupt) noch asserts, ausserdem ist eine unerwartete Exception generell ein Fehler in JUnit, oder würdest du lieber asserts schreiben für jede mögliche & unmögliche Exception die auftreten kann?
wenn du explizit eine Exception erwartest dann kannst du das über @Test(expected=IndexOutOfBoundsException.class) annotieren (was aber auch gefährlich ist...).
wenn du keine erwartest, dann brauchst du auch keine logik erstellen, denn wie schon gesagt -> exception == gescheiterter Test.
@topic:
Ohne Mockobjekte sollten asserts in der Methode vorkommen... ja. Das reine Testen ob eine Exception aufkommt ist, wie gesagt, fraglich.
Sobald man mit Mockobkjekten und deren Verhalten arbeitet, so weniger asserts hat man auch und das ist auch gut so ;-)
wenn du explizit eine Exception erwartest dann kannst du das über @Test(expected=IndexOutOfBoundsException.class) annotieren (was aber auch gefährlich ist...).
ich würde einen Test schreiben der überprüft dass die Methode a) das tut was sie tun soll bzw b) dass ds zurückkommt was zurückkommen soll.
Fliegt eine Exception, so gilt der Test auch als fehlgeschlagen. Ergo keine Exception + Überprüfung => erfolgreicher Test.
also somit ist die überprüfung, dass KEINE exception geworfen wurde in einem "normalen" Test schon inkludiert.
alles klar. wie ich oben schon geschrieben habe, ich erweitere die Test-Methoden gerade und prüfe ob bestimmte Dinge passieren, die passieren sollen (das meinte ich mit Auswirklungen eines Aufrufes, vielleicht wurde ich falsch verstanden??).
Also du willst testen ob auch wirklich eine Exception fliegt wenn du ein bestimmte Parameter übergibst? Dann könntest du das so machen wie ich oben gemacht habe oder über die Annotation wie bygones gesagt hat. Die Frage ist was du überhaupt testen möchtest?
Um möglichst gute Testabdeckung zu erreichen bietet es sich an Coverage Tools wie z.B. Cobertura zusätzlich zu verwenden.
die intension dieser tests war und bleibt, zu überprüfen, ob ein bestimmter methodenaufruf normal funktioniert und keine exce geworfen werden (das habe ich bereits oben geschrieben).
das glaube ich nicht dass das misverständnis auf meiner seite ist, aber es ist völlig egal. es wäre mir jetzt komplizierter das zu "beweisen", als es sein zu lassen
das stimmt würde ich im normallfall auch tun, da aber es gar nicht untersucht werden soll (frag mich nicht warum), begnüge ich mich mit einfachem assertNotNull