简体   繁体   中英

What can cause JUnit to disregard @Ignore annotations?

I just used MyEclipse to automatically generate some JUnit test cases. One of the generated methods looks like this:

@Ignore("Ignored") @Test
public void testCreateRevision()
{
    fail("Not yet implemented"); // TODO
}

I added the @Ignore annotation manually. However, when I run the test, JUnit lists that method, and others like it, under "failures," rather than ignoring them (related: What's the difference between failure and error in JUnit? ). And it displays the "Not yet implemented" message instead of the "Ignored" message. Clearly, fail() must be getting called, and therefore, the @Ignore assertion is not working.

What's going on here? Is there a setting I need to enable for this to work?

EDIT:
Things I have considered/tried so far:

  • I am using JUnit 4, so it's not a version problem.
  • I am importing org.junit.Ignore , so it's not a case of the wrong Ignore being used.
  • I have tried using @Ignore alone, @Ignore @Test and @Ignore("message") @Test ; all fail.

EDIT 2:
I created the tests with MyEclipse, via New > Other; Java > JUnit > JUnit Test Case; New JUnit 4 test New > Other; Java > JUnit > JUnit Test Case; New JUnit 4 test New > Other; Java > JUnit > JUnit Test Case; New JUnit 4 test , and the library in my build path is JUnit 4. I'm building with ant and actually running the case with MyEclipse.

  1. Make sure you are importing the right @Ignore . To be sure use @org.junit.Ignore explicitly.

  2. Double check if your test is being executed by JUnit 4, not 3. The easiest way to do this is to either change the test name so it is not prefixed by test (now it shouldn't be executed at all and JUnit 4 does not need this prefix anyway) or examine your test case inheritance hierarchy: it shouldn't extend directly or indirectly from junit.framework.TestCase (Junit 3 requirement).

I had this problem also even though JUnit 3 was not on my classpath. I believe that compatibility mode on Junit 4 picks up on the 'test' prefix in your testname and thus operates as JUnit 3 would rather than picking up the @Ignore. The solution is to rename your test.

Are you sure the test classes were recompiled?

It's a quite common problem, that the recompilation fails because there was typo somewhere in the sources (like a missing semicolon), and the IDE does not tell you that compiling failed.

Try deleting the target/test-classes folder.

In my case I found my IDE was executing the test disregarding the @Ignore annotation. When I ran mvn install (or any other maven phase) the test was skipped and that's what I was actually aiming for (see attached ilustration).

Ilustration of ways of execution

I think its just @Ignore that will skip the test

JUnit Ignore

Ensuring the test class is also imported fixed the issue for me ie

import org.junit.Ignore;
import org.junit.Test;

In JUnit5 use @Disable or @Disable("Reason text")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM