JUnit 4.4 expected exception not working?

D

dom.k.black

I am fairly new to JUnit so maybe I did something silly here.

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)
 
D

dom.k.black

Of course I meant to say I don't understand why the test is failing!

It is receiving the exception I told it to expect.
 
P

Patricia Shanahan

I am fairly new to JUnit so maybe I did something silly here.

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:

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
 
D

dom.k.black

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.
 
O

Owen Jacobson

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
 
P

Patricia Shanahan

Owen said:
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
 
D

dom.k.black

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

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)?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,962
Messages
2,570,134
Members
46,690
Latest member
MacGyver

Latest Threads

Top