全网最全:Junit5的@Suite注解-上

Junit5Suite套件

最近在研究对应的suite套件,发现官网上有了对应的直接@Suite注解配合就可以使用套件,不需要再声明@RunWith(JUnitPlatform.class)
由于官网的解释不是很详细,在这里给大家写一篇比较详细的文章

  • 1)创建 maven 工程 XUnitpom.xml中添加Junit5Suite相关依赖
    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 {
}

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>