Hallo,
führt man eine JUnit Testklasse mit mehreren Testmethoden unter Eclipse aus, so werden alle Methoden nacheinander ausgeführt. Je nach dem, ob sie erfolgreich oder nicht erfolgreich beendet werden, steht im JUnit Übersichtsfenster hinter der jeweiligen Testmethode ein gründer Haken oder ein rotes X. Aber selbst, wenn (unvorhergesehene) Exceptions geworfen werden, werden ALLE Methoden ausgeführt.
Also, ich habe zwei Testmethoden, die nacheinander auseführt werden. Eigentlich sollten beide Methoden ohne Fehler (insb. ohne Exceptions) ausgeführt werden. Es heißt, dass man Methoden, die potentiell Exceptions werfen können, dies im Testcase aber nicht vorgesehen ist, nicht mit einen try-catch statement umgeben soll.
Das habe ich getan.
So, nun komme ich endlich zu meinem Problem:
Eine unvorhergesehen Exception wird geworfen und die JVM stoppt! Ich bekomme auf der Konsole die Exception präsentiert, aber es wird nur meine erste JUnit Testmethode ausgeführt, nicht aber die zweite. Entsprechend sehe ich in der oben beschriebenen Übersicht weder einen grünen Haken (das ist klar), noch ein rotes X! Es existiert aber keine System.exit(0)-Anweisung. Es wird nur "normal" eine Exception geworfen. Aber diese killt JUnit. Was könnten hierfür mögliche Ursachen sein?
Hier ein Minimalbsp. meines TestCodes:
Nochmals auf den Punkt gebracht: Wird TestedClass mit testOne aufgerufen, so wird Exception1 geworfen (aber auf der Konsole, statt im dafür vorgesehenen JUnit Fenster) und testTwo wird nicht mehr ausgeführt! Ich erwarte aber, dass testOne als nicht erfolgreich gekennzeichnet wird (rotes X), die Exception im dafür vorgesehenen JUnit Fenster aufgelistet wird und testTwo trotzdem ausgeführt wird.
In anderen Testcases war dies bislang auch immer der Fall, nur funktiniert es hier nciht mehr. Hat jemand eine Idee für eine mögliche Ursache?
Hier die Exception:
führt man eine JUnit Testklasse mit mehreren Testmethoden unter Eclipse aus, so werden alle Methoden nacheinander ausgeführt. Je nach dem, ob sie erfolgreich oder nicht erfolgreich beendet werden, steht im JUnit Übersichtsfenster hinter der jeweiligen Testmethode ein gründer Haken oder ein rotes X. Aber selbst, wenn (unvorhergesehene) Exceptions geworfen werden, werden ALLE Methoden ausgeführt.
Also, ich habe zwei Testmethoden, die nacheinander auseführt werden. Eigentlich sollten beide Methoden ohne Fehler (insb. ohne Exceptions) ausgeführt werden. Es heißt, dass man Methoden, die potentiell Exceptions werfen können, dies im Testcase aber nicht vorgesehen ist, nicht mit einen try-catch statement umgeben soll.
Das habe ich getan.
So, nun komme ich endlich zu meinem Problem:
Eine unvorhergesehen Exception wird geworfen und die JVM stoppt! Ich bekomme auf der Konsole die Exception präsentiert, aber es wird nur meine erste JUnit Testmethode ausgeführt, nicht aber die zweite. Entsprechend sehe ich in der oben beschriebenen Übersicht weder einen grünen Haken (das ist klar), noch ein rotes X! Es existiert aber keine System.exit(0)-Anweisung. Es wird nur "normal" eine Exception geworfen. Aber diese killt JUnit. Was könnten hierfür mögliche Ursachen sein?
Hier ein Minimalbsp. meines TestCodes:
Code:
/**
* @throws MyException1
* @throws MyException2
*/
public void testOne() throws MyException1, MyException2{
String[] callingArgument = new String[]{"1","2"};
System.out.println();
TestedClass.main(callingArgument);
System.out.println();
}
/**
* @throws MyException1
* @throws MyException2
*/
public void testTwo() throws MyException1, MyException2{
String[] callingArgument = new String[]{"3","4"};
System.out.println();
TestedClass.main(callingArgument);
System.out.println();
}
Nochmals auf den Punkt gebracht: Wird TestedClass mit testOne aufgerufen, so wird Exception1 geworfen (aber auf der Konsole, statt im dafür vorgesehenen JUnit Fenster) und testTwo wird nicht mehr ausgeführt! Ich erwarte aber, dass testOne als nicht erfolgreich gekennzeichnet wird (rotes X), die Exception im dafür vorgesehenen JUnit Fenster aufgelistet wird und testTwo trotzdem ausgeführt wird.
In anderen Testcases war dies bislang auch immer der Fall, nur funktiniert es hier nciht mehr. Hat jemand eine Idee für eine mögliche Ursache?
Hier die Exception:
Code:
java.io.IOException: MY SELF WRITTEN MESSAGE
at (EDIT: MY CLASSNAMES, ETC)
at testsWithJUnit.Test.testOne(Test.java:54)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:232)
at junit.framework.TestSuite.run(TestSuite.java:227)
at org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:76)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)