Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

JUnit 4.4 expected exception not working?

47 views
Skip to first unread message

dom.k...@googlemail.com

unread,
Mar 24, 2008, 3:02:22 PM3/24/08
to
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)

dom.k...@googlemail.com

unread,
Mar 24, 2008, 6:03:17 PM3/24/08
to
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.

Patricia Shanahan

unread,
Mar 24, 2008, 6:12:41 PM3/24/08
to
dom.k...@googlemail.com wrote:
> 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

dom.k...@googlemail.com

unread,
Mar 24, 2008, 6:34:34 PM3/24/08
to
On 24 Mar, 22:12, Patricia Shanahan <p...@acm.org> wrote:

Thanks for confirming this. Maybe I picked up a dodgy beta JUnit
version. I will try a different one.

Owen Jacobson

unread,
Mar 24, 2008, 7:53:18 PM3/24/08
to

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

Patricia Shanahan

unread,
Mar 24, 2008, 8:06:18 PM3/24/08
to

Indeed, the test in which I embedded the sample code is designed as a
JUnit 4 test, and does not extend TestCase.

Patricia

dom.k...@googlemail.com

unread,
Mar 25, 2008, 4:01:03 AM3/25/08
to

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

0 new messages