问题
I cannot get Maven Surefire to execute my JUnit 4 tests even after I tried all the advices from another post.
My POM:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>maven-test</groupId>
<artifactId>maven-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>com.springsource.org.junit</artifactId>
<version>4.4.0</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.5</version>
</plugin>
</plugins>
</build>
</project>
My Test:
public class TestSimple {
public void testSurePass()
{
int x = 1;
Assert.assertEquals(1, x);
}
@Test
public void surePass()
{
int x = 1;
Assert.assertEquals(1, x);
}
}
Surefire picked up testSurePass, but never saw surePass. I tried mvn -X:
[INFO] [surefire:test {execution: default-test}]
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG] org.apache.maven.surefire:surefire-booter:jar:2.5:runtime (selected for runtime)
[DEBUG] org.apache.maven.surefire:surefire-api:jar:2.5:runtime (selected for runtime)
[DEBUG] Adding to surefire booter test classpath: C:\Users\.m2\repository\org\apache\maven\surefire\surefire-booter\2.5\surefire-booter-2.5.jar
[DEBUG] Adding to surefire booter test classpath: C:\Users\.m2\repository\org\apache\maven\surefire\surefire-api\2.5\surefire-api-2.5.jar
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG] Retrieving parent-POM: org.apache.maven.surefire:surefire-providers:pom:2.5 for project: null:surefire-junit:jar:null from the repository.
[DEBUG] Adding managed dependencies for unknown:surefire-junit
[DEBUG] org.apache.maven.surefire:surefire-api:jar:2.5
[DEBUG] org.apache.maven.surefire:surefire-booter:jar:2.5
[DEBUG] org.codehaus.plexus:plexus-utils:jar:1.5.9
[DEBUG] org.apache.maven.surefire:surefire-junit:jar:2.5:test (selected for test)
[DEBUG] junit:junit:jar:3.8.1:test (selected for test)
[DEBUG] org.apache.maven.surefire:surefire-api:jar:2.5:test (selected for test)
[DEBUG] Adding to surefire test classpath: C:\Users\.m2\repository\org\apache\maven\surefire\surefire-junit\2.5\surefire-junit-2.5.jar
[DEBUG] Adding to surefire test classpath: C:\Users\.m2\repository\junit\junit\3.8.1\junit-3.8.1.jar
[DEBUG] Adding to surefire test classpath: C:\Users\.m2\repository\org\apache\maven\surefire\surefire-api\2.5\surefire-api-2.5.jar
[DEBUG] Test Classpath :
[DEBUG] C:\Workspace\tests\maven-test\target\test-classes
[DEBUG] C:\Workspace\tests\maven-test\target\classes
[DEBUG] C:\Users\.m2\repository\org\junit\com.springsource.org.junit\4.4.0\com.springsource.org.junit-4.4.0.jar
[DEBUG] Setting system property [user.dir]=[C:\Workspace\tests\maven-test]
[DEBUG] Setting system property [localRepository]=[C:\Users\.m2\repository]
[DEBUG] Setting system property [basedir]=[C:\Workspace\tests\maven-test]
Surefire 2.5 adds junit-3.8.1 to its test classpath automatically. Although junit-4.4.0 is also added (not to surefire test classpath, but Test Classpath), junit-3.8.1 seems to take precedence. Maven's surefire-api project has a dependency on junit-3.8.1 according to http://maven.apache.org/surefire/surefire-providers/dependencies.html.
Am I missing some configuration here?
回答1:
Surefire has a junit-version artifact detection mechanim that is being fooled by you using the junit artifact packaged by springsource. You need to set the junitartifactname parameter to org.junit:com.springsource.org.junit
回答2:
I'm lost, I cannot reproduce your problem. But there is indeed a Jira issue (see EBR-220) explaining that you need to add the following to the surefire configuration when using the JUnit artifact packaged by SpringSource:
<junitArtifactName>org.junit:com.springsource.org.junit</junitArtifactName>
回答3:
It's possible to use JUnit 4.x with maven 1.x :
* add Junit 4.X in your dependencies
* Use the JUnit4TestAdapter in your test classes :
/**
* @return instance of this as Junit test case
*/
public static junit.framework.Test suite() { return new JUnit4TestAdapter(MyTestClass.class); }
* run maven with a jdk >= 5
回答4:
Try to check this: JUnit + Maven + Eclipse: Why @BeforeClass does not work?
来源:https://stackoverflow.com/questions/2182376/surefire-is-not-picking-up-junit-4-tests