1、Maven本身并不是一个单元测试框架,它只是构建,执行到特定生命周期阶段的时候,通过插件maven-surefire-plugin(测试运行器Test Runner)来执行JUnit/TestNG的测试用例。且这个插件能兼容JUnit3,JUnit4,TestNG。
2、当pom.xml文件里的<build>没有配置maven-surefire-plugin插件,当运行mvn test命令以编译并执行你项目下的测试类(即src/test/java目录下的java文件)时,会按maven-surefire-plugin插件的默认配置来执行的。所谓的默认配置是指以下几类:
1) **/Test*.java:任何子目录下,所有以Test开头的Java类
2) **/*Test.java:任何子目录下,所有以Test结尾的Java类
3) **/*TestCase.java:任何子目录下,所有以TestCase结尾的Java类
3、如果想让maven执行指定的测试类,则需要配置,配置方式大概有以下几种:
a)使用include和exclude,以“通配符”模式来限定哪些是测试类,哪些不是
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.xuwei.test</groupId> <artifactId>DanXinBenTest</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>danxinben-test</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> </dependency> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.9.4</version> <scope>test</scope> <!-- <classifier>jdk15</classifier>--> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>javax.tools.JavaCompiler</artifactId> <version>3.0</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.9</version> <configuration> <includes> <include>**/*.java</include> </includes> <!--includes标签是指定了任何路径下,任何java类都执行测 试--> <excludes> <exclude>**/*ServiceTest.java</exclude> </excludes> <!--excludes标签是指定了任何路径下,以ServiceTest结尾的不执行测试。若一个测试类既在<includes>中,也在<excludes>时,则按这个测试类最终在哪一边来执行,--> </configuration> </plugin> </plugins> </build> </project>
b) 可以使用skipTests来跳过测试的执行(编译了但不执行)
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.9</version> <configuration> <skipTests>true</skipTests> <!--不执行测试用例 --> </configuration> </plugin>
c)在maven-compiler-plugin插件中设置skip=true,在maven-surefire-plugin中设置skip=true,这代表着在编译时跳过了测试类,在执行的时候也跳过过测试类。
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>javax.tools.JavaCompiler</artifactId> <version>3.0</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> <skip>true</skip> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.9</version> <configuration> <skip>true</skip> <!-- <skipTests>true</skipTests> --> <!-- 不执行测试用例 --> </configuration> </plugin> </plugins>
d)maven-surefile-plugin插件提供了一个test参数,让用户只运行指定的测试类(测试类是指“包名+类名”)
e)若测试框架是TestNG,则maven-surefire-plugin中可使用参数groups来指定TestCase