As of this writing, TestNG still doesn't support JUnit4. Problem is, Spring Roo uses JUnit 4 and I happen to be developing a liking for TestNG lately.
Many folks out there have suggested defining two Surefire executions, one for JUnit 4 & one for TestNG. I did that, but every time I do, it looks like the default configuration of Surefire runs first, then whatever other test executions that you've defined next, often resulting in duplicate tests being run.
I noticed that the default Surefire execution id is default-test. By simply defining an execution with id default-test and setting skipTests to true, I was able to avoid the unwanted default run. You could either redefine the default-test execution or defeat it and define whatever other test executions you want to.
Here's the POM snippet that defeats the default-test execution and defines one for JUnit 4 & TestNG:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.11</version>
<executions>
<execution>
<id>default-test</id>
<configuration>
<skipTests>true</skipTests>
</configuration>
<goals>
<goal>test</goal>
</goals>
</execution>
<execution>
<id>junit-tests</id>
<goals>
<goal>test</goal>
</goals>
<configuration>
<testNGArtifactName>none:none</testNGArtifactName>
...
</configuration>
</execution>
<execution>
<id>testng-tests</id>
<goals>
<goal>test</goal>
</goals>
<configuration>
<junitArtifactName>none:none</junitArtifactName>
...
</configuration>
</execution>
</executions>
</plugin>
I hope this helps you some time.
2 comments:
Actually, TestNG supports JUnit 4 as of last week :-)
Check out the version in master if you want to try it, feel free to email me if you encounter issues.
Sweet, @Cedric! I'll have a look when I get a chance.
Post a Comment