48

I have the following test case in eclipse, using JUnit 4 which is refusing to pass. What could be wrong?

@Test(expected = IllegalArgumentException.class)
public void testIAE() {
    throw new IllegalArgumentException();
}

This exact testcase came about when trying to test my own code with the expected tag didn't work. I wanted to see if JUnit would pass the most basic test. It didn't.

I've also tested with custom exceptions as expected without luck.

Screenshot: Screenshot

Glorfindel
  • 21,988
  • 13
  • 81
  • 109
Ben S
  • 68,394
  • 30
  • 171
  • 212

3 Answers3

102

The problem is that your AnnounceThreadTest extends TestCase. Because it extends TestCase, the JUnit Runner is treating it as a JUnit 3.8 test, and the test is running because it starts with the word test, hiding the fact that the @Test annotiation is in fact not being used at all.

To fix this, remove the "extends TestCase" from the class definition.

Yishai
  • 90,445
  • 31
  • 189
  • 263
  • Thank you, this fixed it as advertised. – Ben S Jul 20 '09 at 01:24
  • 5
    After removing the extends TestCase, I had to add the additional import to ensure I had the static assert methods. import static org.junit.Assert.*; – burtlo Jul 26 '09 at 21:58
  • 9
    Awesome job at finding the solution hidden as a hint in a screenshot – matt b Mar 17 '10 at 12:47
  • Solved!! Thank you, saved me some time. – Patelify Dec 12 '11 at 23:47
  • Argggghhhh, I just spent an hour and a half on this issue without finding this answer. Thank you, thank you, thank you! – Dylan Knowles Oct 10 '14 at 17:27
  • The screen shot is a broken link now so we can't see what the original class looked like. I found that if I renamed my class and my tests to no longer start with "test" that suddenly @Begin works and "expected" works too. Thanks Yishai! – Seansms Jan 11 '17 at 01:40
  • @Seansms, the original screen shot shows that the class extended TestCase. I assume that is your problem as well. Don't extend TestCase, that is the JUnit 3.8 way. – Yishai Jan 11 '17 at 03:45
3

Just ran this in IntelliJ using JUnit 4.4:

   @Test(expected = IllegalArgumentException.class)
   public void testExpected()
   {
       throw new IllegalArgumentException();
   }

Passes perfectly.

Rebuild your entire project and try again. There's something else that you're doing wrong. JUnit 4.4 is working as advertised.

duffymo
  • 305,152
  • 44
  • 369
  • 561
3

Instead of removing extends TestCase , you can add this to run your test case with Junit4 which supports annotation.

@RunWith(JUnit4.class)

HsYoo
  • 76
  • 3