Suite套件
- JUnit5通过Suite注解使用套件
- 不需要再声明RunWith(JUnitPlatform.class)
pom.xml
对应依赖导入
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>11</java.version>
<maven.compiler.version>3.3</maven.compiler.version>
<maven.surefire.version>3.0.0-M5</maven.surefire.version>
<junit.version>5.8.1</junit.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>${junit.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven.surefire.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.version}</version>
<configuration>
<encoding>UTF-8</encoding>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
套件Suite
- 如果项目是从Junit4进行迁移,仍然需要RunWith(JUnitPlatform.class)
- 如果是一个全新的JUnit5项目,直接使用Suite注解
套件@Suite
测试类准备
project
│ README.md
│
│
└───class1
│ │ OneTest.java
│ │ TwoTest.java
│
└───class2
│ OneTest.java
│ TwoTest.java
│ TreeTest.java
│ TestFour.java
测试类准备-class1
package com.ceshiren.class1;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
public class OneTest {
@Test
@Tag("SuiteTag")
@Tag("SuiteTag1")
void test1(){
System.out.println("com.class5.packageA-----OneTest");
}
}
package com.ceshiren.class1;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
public class TwoTest {
@Test
@Tag("SuiteTag")
void test1(){
System.out.println("com.class5.packageA-----TwoTest");
}
}
测试类准备-class2
package com.ceshiren.class2;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
public class OneTest {
@Test
@Tag("SuiteTag")
@Tag("SuiteTag1")
void test1(){
System.out.println("com.class5.packageB-----OneTest");
}
}
package com.ceshiren.class2;
import org.junit.jupiter.api.Test;
public class TwoTest {
@Test
void test1(){
System.out.println("com.class5.packageB-----TwoTest");
}
}
## 测试类准备-class2
package com.ceshiren.class2;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
public class TreeTest {
@Test
@Tag("SuiteTag1")
void test1(){
System.out.println("com.class5.packageB-----TreeTest1");
}
}
package com.ceshiren.class2;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
public class TestFour {
@Test
@Tag("SuiteTag1")
void test1(){
System.out.println("com.class5.packageB-----TestFour");
}
@Test
void test2(){
System.out.println("com.class5.packageB-----TestFour---test2");
}
@Test
void test3(){
System.out.println("com.class5.packageB-----TestFour---test3");
}
@Test
void test4(){
System.out.println("com.class5.packageB-----TestFour---test4");
}
}
测试套件组合
执行单个测试类
- @Suite+@SelectClasses
- 过滤出需要执行的单个测试类
package com.ceshiren.testcases;
import com.ceshiren.class1.OneTest;
import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;
//测试套件基本注解
@Suite
//选择需要执行的测试类 参数:OneTest.class
@SelectClasses(OneTest.class )
public class RunSuite01Test {
}
执行多个测试类
- @Suite+@SelectClasses
- 过滤出需要执行的多个测试类
package com.ceshiren.testcases;
import com.ceshiren.class1.TwoTest;
import com.ceshiren.class2.OneTest;
import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;
@Suite
//选择需要执行的测试类
//参数类型为集合:{OneTest.class,TwoTest.class}
@SelectClasses({
OneTest.class,
TwoTest.class
})
public class RunSuite02Test {
}
执行单个测试包
- @Suite+@SelectPackages
- 过滤出需要执行的单个测试包
package com.ceshiren.testcases;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.Suite;
@Suite
//选择需要执行的测试包
//参数类型为String:com.ceshiren.class1
@SelectPackages("com.ceshiren.class1")
public class RunSuite03Test {
}
执行多个测试包
- @Suite+@SelectPackages
- 过滤出需要执行的多个测试包
package com.ceshiren.testcases;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.Suite;
@Suite
//选择需要执行的测试包
//参数类型为集合:{"com.ceshiren.class1","com.ceshiren.class2"}
//
@SelectPackages({
"com.ceshiren.class1",
"com.ceshiren.class2"
})
public class RunSuite04Test {
}
自定义Suite
套件的显示名称
- @Suite+@SuiteDisplayName+*
- 自定义
Suite
套件的显示名称
package com.ceshiren.testcases;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.Suite;
import org.junit.platform.suite.api.SuiteDisplayName;
@Suite
//对应测试套件显示的名称是Test Suite
@SuiteDisplayName("Test Suite")
@SelectPackages({
"com.ceshiren.class1",
"com.ceshiren.class2"
})
public class RunSuite05Test {
}
过滤需执行的测试包
- @Suite+@SelectPackages+@IncludePackages
- 过滤需执行的测试包
package com.ceshiren.testcases;
import org.junit.platform.suite.api.IncludePackages;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.Suite;
import org.junit.platform.suite.api.SuiteDisplayName;
@Suite
@SuiteDisplayName("Test Suite06")
@SelectPackages({
"com.ceshiren"
})
//对应的满足SelectPackages的包名
//参数类型 String :"com.ceshiren.class1"
@IncludePackages("com.ceshiren.class1")
public class RunSuite06Test {
}
过滤不需要执行的测试包
- @Suite+@SelectPackages+@ExcludePackages
- 过滤不需要执行的测试包
package com.ceshiren.testcases;
import org.junit.platform.suite.api.ExcludePackages;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.Suite;
import org.junit.platform.suite.api.SuiteDisplayName;
@Suite
@SuiteDisplayName("Test Suite07")
@SelectPackages({
"com.ceshiren.class1",
"com.ceshiren.class2"
})
//满足SelectPackages下的包且不执行"com.ceshiren.class1"下的所有类
//参数是String : "com.ceshiren.class1"
@ExcludePackages("com.ceshiren.class1")
public class RunSuite07Test {
}
正则匹配Test
- @Suite+@SelectPackages+@IncludeClassNamePatterns
- 根据正则匹配,对应class执行
package com.ceshiren.testcases;
import org.junit.platform.suite.api.*;
@Suite
@SuiteDisplayName("Test Suite08")
@SelectPackages({
"com"
})
//对应正则表达式匹配执行的相关class
//参数类型为集合:{"com.ceshiren.class2.*Test"}
@IncludeClassNamePatterns({
"com.ceshiren.class2.*Test"
// "com.ceshiren.class2.*"
})
public class RunSuite08Test {
}
正则匹配Test不被执行
- @Suite+@SelectPackages+ @ExcludeClassNamePatterns
- 根据正则匹配 对应class不被执行
package com.ceshiren.testcases;
import org.junit.platform.suite.api.*;
@Suite
@SuiteDisplayName("Test Suite09")
@SelectPackages({
"com.ceshiren.class2"
})
//对应正则表达式匹配不被执行的相关class
//参数类型为集合:{"com.ceshiren.class2.*Test$"}
@ExcludeClassNamePatterns("com.ceshiren.class2.*Test$")
public class RunSuite09Test {
}
执行包内的标签
- @Suite+@SelectPackages+@IncludeTags
- 执行包内包含标签的方法或者类
package com.ceshiren.testcases;
import org.junit.platform.suite.api.*;
@Suite
@SuiteDisplayName("Test Suite10")
@SelectPackages({
"com.ceshiren.class2"
})
//对应包含的标签
//参数是集合:{"SuiteTag1"}
@IncludeTags({
// "SuiteTag"
"SuiteTag1"
})
public class RunSuite10Test {
}
不执行包内标签的方法/类
- @Suite+@SelectPackages+@ExcludeTags
- 不执行包内标签的方法/类
package com.ceshiren.testcases;
import org.junit.platform.suite.api.*;
@Suite
@SuiteDisplayName("Test Suite11")
@SelectPackages({
"com.ceshiren.class2"
})
//对应不执行包含的标签
//参数是集合:{"SuiteTag1"}
@ExcludeTags({
"SuiteTag1"
})
public class RunSuite11Test {
}