I have the following in a test case:
@Test (expected=ArrayIndexOutOfBoundsException.class)
public void testOutOfRangeChannel() {
throw new ArrayIndexOutOfBoundsException();
}
When I run the test case I get an error, due to the exception. The
trace is:
java.lang.ArrayIndexOutOfBoundsException
at
net.sf.xwav.soundrenderer.test.TestSoundBuffer.testOutOfRangeChannel(TestSoundBuffer.java:
81)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
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.JUnit38ClassRunner.run(JUnit38ClassRunner.java:
81)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:
38)
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)
I don't understand why the expection is giving a success result? (of
course teh code above is not the actual test I want to do, just a cut
down example)
It is receiving the exception I told it to expect.
Are you sure you are running the right JUnit version?
I tried copying the sample code into one of my own tests, and it ran
successfully, no exception trace. The problem has to be in which JUnit
version you are running how, not in the actual test case.
Patricia
Thanks for confirming this. Maybe I picked up a dodgy beta JUnit
version. I will try a different one.
Note that if your test suite is a class derived from TestCase or
TestSuite, JUnit 4 will run it "as if" under JUnit 3's rules, in which
case any exception is an error, and @Test is ignored entirely. To use
the JUnit 4 features, your class should be derived from Object -- and
you don't need to name your test cases testSomething, just something,
provided they're correctly annotated.
-o
Indeed, the test in which I embedded the sample code is designed as a
JUnit 4 test, and does not extend TestCase.
Patricia
Thanks, that might be it.
I changed the class to be derived from TestCase.
But if I don't do that, I can add the test to the AllTests test suite
(addSuite needsa TestCase subclass)?