javamaven-2mavensurefire

Surefire is not picking up Junit 4 tests


For some reason I cannot get Maven 2 Surefire plugin to execute JUnit 4 test class.

public class SimpleTest {
  @org.junit.Test
  public void simple() {
     System.out.println("foo");
  }
}

However if I change this class to be JUnit-3 like, such as

public class SimpleTest extends junit.framework.TestCase {
  public void testBar() {
     System.out.println("bar");
  }

  @org.junit.Test
  public void simple() {
     System.out.println("foo");
  }
}

then it gets executed. Here's what I've done:

The module I am having this problem at doesn't have JUnit 3 tests.

Is there anything else I am missing?


Solution

  • mvn -X helped me to reveal the following:

    ...
    [INFO] [surefire:test {execution: default-test}]
    [DEBUG] dummy:dummy:jar:1.0 (selected for null)
    [DEBUG]   org.apache.maven.surefire:surefire-booter:jar:2.4.3:runtime (selected for runtime)
    [DEBUG]     org.apache.maven.surefire:surefire-api:jar:2.4.3:runtime (selected for runtime)
    [DEBUG] Adding to surefire booter test classpath: /home/mindas/.m2/repository/org/apache/maven/surefire/surefire-booter/2.4.3/surefire-booter-2.4.3.jar
    [DEBUG] Adding to surefire booter test classpath: /home/mindas/.m2/repository/org/apache/maven/surefire/surefire-api/2.4.3/surefire-api-2.4.3.jar
    [DEBUG] dummy:dummy:jar:1.0 (selected for null)
    [DEBUG]   org.testng:testng:jar:jdk15:5.8:test (selected for test)
    [DEBUG]     junit:junit:jar:3.8.1:test (selected for test)
    [DEBUG] Adding to surefire booter test classpath: /home/mindas/.m2/repository/org/testng/testng/5.8/testng-5.8-jdk15.jar
    [DEBUG] Adding to surefire booter test classpath: /home/mindas/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar
    [DEBUG] dummy:dummy:jar:1.0 (selected for null)
    [DEBUG] Retrieving parent-POM: org.apache.maven.surefire:surefire-providers:pom:2.4.3 for project: null:surefire-testng:jar:null from the repository.
    [DEBUG] Adding managed dependencies for unknown:surefire-testng
    [DEBUG]   org.apache.maven.surefire:surefire-api:jar:2.4.3
    [DEBUG]   org.apache.maven.surefire:surefire-booter:jar:2.4.3
    [DEBUG]   org.codehaus.plexus:plexus-utils:jar:1.5.1
    [DEBUG]   org.apache.maven.surefire:surefire-testng:jar:2.4.3:test (selected for test)
    [DEBUG]     org.apache.maven:maven-artifact:jar:2.0:test (selected for test)
    [DEBUG]       org.codehaus.plexus:plexus-utils:jar:1.0.4:test (selected for test)
    [DEBUG]     junit:junit:jar:3.8.1:test (selected for test)
    [DEBUG]     org.testng:testng:jar:jdk15:5.7:test (selected for test)
    [DEBUG]     org.apache.maven.surefire:surefire-api:jar:2.4.3:test (selected for test)
    ...
    [DEBUG] Test Classpath :
    ...
    [DEBUG]   /home/mindas/.m2/repository/junit/junit/4.7/junit-4.7.jar
    

    So it seems that the problem was coming from testng jar requiring JUnit v3.8.1. Even though Test Classpath was set to depend on JUnit 4, it was too late.

    testng dependency was located in my POM:

    <dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <version>5.8</version>
      <scope>test</scope>
      <classifier>jdk15</classifier>
    </dependency>
    

    Immediately after I have commented it out, tests started to execute.

    Lessons learned:

    Thanks everybody for your help. Unfortunately there is no way to split answer points between Pascal and Kaleb, but Kaleb's advice to use mvn -X helped me to get on the right track so correct answer points go to him.