zoukankan      html  css  js  c++  java
  • Java JUnit框架里@Category注解的工作原理

    Suppose you have a large number of unit test cases and you don’t want them to be executed all at the same time during Maven build. You can simply achieve it via annotation @Category.

    (1) Create empty class FastTests and SlowTests.
    (2) In your test case class, categorize your test method using @Category annotation:

    (3) Append the following code to your pom.xml:

    <profiles>
    		<profile>
    			<id>SlowTests</id>
    			<properties>
    				<testcase.groups>com.sap.SlowTests</testcase.groups>
    			</properties>
    		</profile>
    		<profile>
    			<id>FastTests</id>
    			<properties>
    				<testcase.groups>com.sap.FastTests</testcase.groups>
    			</properties>
    		</profile>
    	</profiles>
    
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-compiler-plugin</artifactId>
    				<version>3.1</version>
    				<configuration>
    					<source>1.8</source>
    					<target>1.8</target>
    				</configuration>
    			</plugin>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-surefire-plugin</artifactId>
    				<version>2.13</version>
    				<dependencies>
    					<dependency>
    						<groupId>org.apache.maven.surefire</groupId>
    						<artifactId>surefire-junit47</artifactId>
    						<version>2.13</version>
    					</dependency>
    				</dependencies>
    				<configuration>
    					<groups>${testcase.groups}</groups>
    				</configuration>
    			</plugin>
    		</plugins>
    	</build>
    

    (4) In my project, by default all 7 test methods will be executed during Maven build:

    Suppose you only want to execute unit test belonging to category “SlowTests”, use the following command line:

    Since now I only marked one method with annotation SlowTests, only one test method is executed:

    If you would like to execute all unit tests EXCEPT @SlowTests, simply add another profile in pom.xml:

    <profile>
    			<id>NonSlowTests</id>
    			<build>
    				<plugins>
    					<plugin>
    						<groupId>org.apache.maven.plugins</groupId>
    						<artifactId>maven-surefire-plugin</artifactId>
    						<configuration>
    							<excludedGroups>com.sap.SlowTests</excludedGroups>
    						</configuration>
    					</plugin>
    				</plugins>
    			</build>
    		</profile>
    

    Before test, in order to prove that Slow method is NOT really executed, I add a system.out.println in each method:

    Use command line: mvn test -P NonSlowTests
    From console output, I can ensure that the method with @Category(SlowTests.class) is NOT executed at all.

    要获取更多Jerry的原创文章,请关注公众号"汪子熙":

  • 相关阅读:
    QT多个UI文件加入一个项目
    【Go语言】学习资料
    MVC如何在Pipeline中接管请求的?
    ASP.NET MVC路由(5)
    C# dll 事件执行 js 回调函数
    初识Identity
    SpringMVC拦截器
    UrlRouting的理解
    ASP.NET MVC路由
    ASP.NET MVC Module
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/12845403.html
Copyright © 2011-2022 走看看