Maven+TestNG执行测试

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

猜你喜欢

转载自ilovejoe.iteye.com/blog/2220705