junit中的case和suite的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了junit中的case和suite的区别相关的知识,希望对你有一定的参考价值。
参考技术A :使用的是junit4.4,想要有选择性的执行TestCase中的Test,是需要自己扩展junit4.4的API的。junit4.8的版本中,加入了一个Runner:Categories,可以实现只跑特定分类的Test。现在通过代码举例来比较两个版本中批量执行Test的差别.本回答被提问者采纳全网最全:Junit5的@Suite注解-上
Junit5
的Suite
套件
最近在研究对应的suite
套件,发现官网上有了对应的直接@Suite
注解配合就可以使用套件,不需要再声明@RunWith(JUnitPlatform.class)
由于官网的解释不是很详细,在这里给大家写一篇比较详细的文章
- 1)创建
maven
工程XUnit
,pom.xml
中添加Junit5
的Suite
相关依赖
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>
下面开始介绍对应套件执行的相关注解,如果项目是从Junit4进行迁移,那还是需要@RunWith(JUnitPlatform.class);如果是一个全新的junit5项目,建议直接使用@Suite注解进行,下面对应的所有注解进行一个示例
@Suite
注解 | 作用 |
---|---|
@Suite | 放在类上的注解;是Junit5平台的一个测试套件 |
@SelectClasses | 过滤出需要执行的测试类 |
@SelectPackages | 过滤出需要执行的测试包 |
@SuiteDisplayName | 自定义Suite套件的显示名称 |
@IncludePackages | @SelectPackages 搭配,过滤出需要执行的测试包 |
@SuiteDisplayName | 过滤出需要执行的个测试类 |
@SelectClasses | 过滤出需要执行的个测试类 |
@SelectClasses | 过滤出需要执行的个测试类 |
@SelectClasses | 过滤出需要执行的个测试类 |
测试类准备
com.packageA
OneTest
package com.packageA;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
/**
* @program: testpro
* @author: 盖盖
* @description:
* @Version 1.0
* @create: 2021/11/30 4:25 下午
*/
public class OneTest
@Test
@Tag("SuiteTag")
@Tag("SuiteTag1")
void test1()
System.out.println("com.class5.packageA-----OneTest");
TwoTest
package com.packageA;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
/**
* @program: testpro
* @author: 盖盖
* @description:
* @Version 1.0
* @create: 2021/11/30 4:25 下午
*/
public class TwoTest
@Test
@Tag("SuiteTag")
void test1()
System.out.println("com.class5.packageA-----TwoTest");
com.packageB
OneTest
package com.packageB;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
/**
* @program: testpro
* @author: 盖盖
* @description:
* @Version 1.0
* @create: 2021/11/30 4:25 下午
*/
public class OneTest
@Test
@Tag("SuiteTag")
@Tag("SuiteTag1")
void test1()
System.out.println("com.class5.packageB-----OneTest");
TwoTest
package com.packageB;
import org.junit.jupiter.api.Test;
/**
* @program: testpro
* @author: 盖盖
* @description:
* @Version 1.0
* @create: 2021/11/30 4:25 下午
*/
public class TwoTest
@Test
void test1()
System.out.println("com.class5.packageB-----TwoTest");
TreeTest
package com.packageB;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
/**
* @program: testpro
* @author: 盖盖
* @description:
* @Version 1.0
* @create: 2021/11/30 4:25 下午
*/
public class TreeTest
@Test
@Tag("SuiteTag1")
void test1()
System.out.println("com.class5.packageB-----TreeTest1");
TestFour
package com.packageB;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
/**
* @program: testpro
* @author: 盖盖
* @description:
* @Version 1.0
* @create: 2021/12/1 4:00 下午
*/
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 class5.packageC;
import com.packageA.OneTest;
import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;
/**
* @program: testpro
* @author: 盖盖
* @description: 过滤出需要执行的单个测试类
* @Version 1.0
* @create: 2021/11/30 1:54 下午
*/
@Suite
@SelectClasses(OneTest.class )
public class RunSuite01Test
过滤出需要执行的多个测试类
package class5.packageC;
import com.packageA.OneTest;
import com.packageB.TwoTest;
import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;
/**
* @program: testpro
* @author: 盖盖
* @description: 过滤出需要执行的多个测试类
* @Version 1.0
* @create: 2021/11/30 1:54 下午
*/
@Suite
@SelectClasses(
OneTest.class,
TwoTest.class
)
public class RunSuite02Test
@Suite
+@SelectPackages
过滤出需要执行的单个测试包
package class5.packageC;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.Suite;
import org.junit.platform.suite.api.SuiteDisplayName;
/**
* @program: testpro
* @author: 盖盖
* @description: 过滤出需要执行的测试包
* @Version 1.0
* @create: 2021/11/30 1:54 下午
*/
@Suite
@SuiteDisplayName("Test Suite")
@SelectPackages("com.packageA")
public class RunSuite03Test
过滤出需要执行的多个测试包
package class5.packageC;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.Suite;
import org.junit.platform.suite.api.SuiteDisplayName;
/**
* @program: testpro
* @author: 盖盖
* @description: 过滤出需要执行的测试包
* @Version 1.0
* @create: 2021/11/30 1:54 下午
*/
@Suite
@SuiteDisplayName("Test Suite04")
@SelectPackages(
"com.packageA",
"com.packageB"
)
public class RunSuite04Test
@Suite
+@SuiteDisplayName
+*
自定义Suite套件的显示名称
在上面对应用例中已经生效
@Suite
+@SelectPackages
+@IncludePackages
配合使用过滤出需要执行的测试包
package class5.packageC;
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;
/**
* @program: testpro
* @author: 盖盖
* @description: 配合使用过滤出需要执行的测试包
* @Version 1.0
* @create: 2021/11/30 1:54 下午
*/
@Suite
@SuiteDisplayName("Test Suite05")
@SelectPackages(
"com"
)
@IncludePackages("com.packageB")
public class RunSuite05Test
@Suite
+@SelectPackages
+@ExcludePackages
配合使用过滤出不需要执行的测试包
package class5.packageC;
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;
/**
* @program: testpro
* @author: 盖盖
* @description: 配合使用过滤出不需要执行的测试包
* @Version 1.0
* @create: 2021/11/30 1:54 下午
*/
@Suite
@SuiteDisplayName("Test Suite06")
@SelectPackages(
"com"
)
@ExcludePackages(
"com.packageB"
)
public class RunSuite06Test
@Suite
+@SelectPackages
+@IncludeClassNamePatterns
用正则匹配出来具体的class执行
package class5.packageC;
import org.junit.platform.suite.api.IncludeClassNamePatterns;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.Suite;
import org.junit.platform.suite.api.SuiteDisplayName;
/**
* @program: testpro
* @author: 盖盖
* @description: 用正则匹配出来具体的class执行
* @Version 1.0
* @create: 2021/11/30 1:54 下午
*/
@Suite
@SuiteDisplayName("Test Suite07")
@SelectPackages(
"com"
)
@IncludeClassNamePatterns(
"com.packageB.*Test"
// "com.packageB.*"
)
public class RunSuite07Test
@Suite
+@SelectPackages
+@IncludeClassNamePatterns
用正则匹配出来具体的class哪些不被执行
package class5.packageC;
import org.junit.platform.suite.api.*;
/**
* @program: testpro
* @author: 盖盖
* @description: 用正则匹配出来具体的class哪些不被执行
* @Version 1.0
* @create: 2021/11/30 1:54 下午
*/
@Suite
@SuiteDisplayName("Test Suite08")
@SelectPackages(
"com"
)
@ExcludeClassNamePatterns("com.packageB.*Test$")
public class RunSuite08Test
@Suite
+@SelectPackages
+@IncludeTags
运行指定的包下的指定标签的方法
package class5.packageC;
import org.junit.platform.suite.api.IncludeTags;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.Suite;
import org.junit.platform.suite.api.SuiteDisplayName;
/**
* @program: testpro
* @author: 盖盖
* @description:
* @Version 1.0
* @create: 2021/11/30 1:54 下午
*/
@Suite
@SuiteDisplayName("Test Suite Tag")
@SelectPackages(
"com"
)
@IncludeTags(
// "SuiteTag"
"SuiteTag1"
)
public class RunSuite09Test
@Suite
+@SelectPackages
+@ExcludeTags
运行指定的包下并且不包含指定标签的方法
package class5.packageC;
import org.junit.platform.suite.api.*;
/**
* @program: testpro
* @author: 盖盖
* @description:
* @Version 1.0
* @create: 2021/11/30 1:54 下午
*/
@Suite
@SuiteDisplayName("Test Suite")
@SelectPackages(
"com"
)
@ExcludeTags(
"SuiteTag1"
)
public class RunSuite10Test
以上是关于junit中的case和suite的区别的主要内容,如果未能解决你的问题,请参考以下文章
如何解析JUnit结果xml文件并在java代码中获取testcase?
gtest从一无所知到熟练使用什么是test suite和test case