Spring Boot 使用 JUnit5 提供的@Tag注解对测试类或方法打标签,以便于在执行测试时按标签进行过滤。
一、标签命名规范- 标签名左右不能带空格,执行测试时会做trim处理;
- 标签名不能用以下字符:(、)、&、|、!、,。
- 定义一个单元测试类,在类上添加便签test-1,其中定义两个测试方法,分别添加标签level-1和level-2。
package com.example.demo; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @Tag("test-1") public class UnitTest1 { @Test @Tag("level-1") public void test1() { System.out.println("Test 1-1"); } @Test @Tag("level-2") public void test2() { System.out.println("Test 1-2"); } } 复制代码
- 定义另一个单元测试类,在类上添加标签test-2,也定义两个测试方法,分别添加标签level-1和level-2。
package com.example.demo; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @Tag("test-2") public class UnitTest2 { @Test @Tag("level-1") public void test1() { System.out.println("Test 2-1"); } @Test @Tag("level-2") public void test2() { System.out.println("Test 2-2"); } } 复制代码
- 执行以下 Maven 命令,观察对应的测试执行过程。
mvn clean test -Dgroups=test-1 mvn clean test -Dgroups=test-2 mvn clean test -Dgroups=level-1 mvn clean test -Dgroups=level-2 复制代码
- 除使用 Maven 命令执行标签过滤测试外,还可以通过配置surefire插件执行标签过滤测试。(surefire是个测试引擎)
三、标签表达式复制代码 org.apache.maven.plugins maven-surefire-pluginlevel-1 *Test*.java
以上关于标签的基本使用方法中,每次测试仅能指定执行一种标签,如果要实现更复杂的标签过滤就要使用标签表达式,即通过与(&)、或(|)、非(!)三种 *** 作符将标签连接起来。
对应的 Maven 命令格式:
mvn clean test -Dgroups='test-1 & level-1' 复制代码
surefire配置格式:
四、自定义标签注解复制代码 org.apache.maven.plugins maven-surefire-plugintest-1 | level-2 *Test*.java
- 自定义标签注解
package com.example.demo; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.junit.jupiter.api.Tag; @Target({ ElementType.TYPE, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) @Tag("level-1") public @interface Level1 { } 复制代码
- 将@Tag注解替换成自定义注解
@Test @Level1 public void test1() { System.out.println("Test 1-1"); } 复制代码
- 还可以进一步简化,将@Test合入自定义标签注解。
package com.example.demo; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @Target({ ElementType.TYPE, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) @Test @Tag("level-1") public @interface Level1 { } 复制代码
- 测试方法只使用自定义标签注解。
@Level1 public void test1() { System.out.println("Test 1-1"); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)