我遇到与Junit4 and TestNG in one project with Maven相同的问题,但我仍有问题。 我创建了一个简单的项目,我需要使用junit4和testng 这是根pom:
<groupId>com.dimas.testmodule</groupId>
<artifactId>TheParent</artifactId>
<version>0.0.001</version>
<name>TheParent</name>
<packaging>pom</packaging>
<properties>
<spring.version>3.0.5.RELEASE</spring.version>
<spring.scope>test</spring.scope>
<maven.surefire.plugin.version>2.9</maven.surefire.plugin.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
...etc
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>default</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<modules>
<module>JUnitOnly</module>
<module>TestNGOnly</module>
<module>testmodule</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven.surefire.plugin.version}</version>
<configuration>
<redirectTestOutputToFile>false</redirectTestOutputToFile>
<excludes>
<exclude>**/*NGTest.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>testNGonly</id>
<modules>
<module>JUnitOnly</module>
<module>TestNGOnly</module>
<module>testmodule</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven.surefire.plugin.version}</version>
<configuration>
<redirectTestOutputToFile>false</redirectTestOutputToFile>
<includes>
<include>**/*NGTest.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
模块JUnitOnly和TestModule只是继承并且不会覆盖任何属性。这是TestNgOnly
<groupId>com.dimas.testmodule.testngonly</groupId>
<artifactId>TestNGOnly</artifactId>
<version>0.0.001</version>
<name>testngonly</name>
<parent>
<groupId>com.dimas.testmodule</groupId>
<artifactId>TheParent</artifactId>
<version>0.0.001</version>
</parent>
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.3.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
<profiles>
<profile>
<id>testNGtest</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven.surefire.plugin.version}</version>
<configuration>
<redirectTestOutputToFile>false</redirectTestOutputToFile>
<suiteXmlFiles>
<suiteXmlFile>
<!--test/resources/my-testng.xml-->
src\test\resources\my-testng.xml
</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
我需要忽略默认配置文件的testng测试,并仅启动配置文件testNGOnly的testng测试。
答案 0 :(得分:1)
有三个模块 - junit
,testng
和mixed
。
默认配置文件应仅执行junit测试 - 即运行junit
模块并运行mixed
模块的junit测试。 testNG
配置文件应仅执行testNG测试 - 即运行testNG
模块并运行mixed
模块的testNG测试。
配置文件在maven中的工作方式,无法exclude
配置文件中的模块。但是,不需要构建不需要的模块。
因此,在默认配置文件中,包含模块junit
和mixed
。
在testNG个人资料中,添加模块testNG
。
遵循maven最佳做法,在<dependencies>
内的父pom中定义<dependencyManagement>
。这允许我们仅在junit
模块中使用junit依赖,在testNG
模块中使用testNG依赖。
三个模块之间没有任何共同的surefire
配置,因此不需要在父pom中指定。
由于不需要在testNG
个人资料中运行junit测试,因此请在skipTests
模块的testNG
个人资料中为junit
添加插件配置。
使用this answer中针对related SO问题的提示配置mixed
pom。这很棘手,因为surefire需要根据配置文件使用junit或testng runner。
我已将上述建议纳入示例项目here。