JUnit5学习之五:标签(Tag)和自定义注解

| 名称 | 链接 | 备注 |

| :-- | :-- | :-- |

| 项目主页 | https://github.com/zq2599/blog_demos | 该项目在GitHub上的主页 |

| git仓库地址(https) | https://github.com/zq2599/blog_demos.git | 该项目源码的仓库地址,https协议 |

| git仓库地址(ssh) | git@github.com:zq2599/blog_demos.git | 该项目源码的仓库地址,ssh协议 |

  1. 这个git项目中有多个文件夹,本章的应用在junitpractice文件夹下,如下图红框所示:

在这里插入图片描述

  1. junitpractice是父子结构的工程,本篇的代码在tag子工程中,如下图:

在这里插入图片描述

[](

)设置标签

  1. 在父工程junitpractice里新建名为tag的子工程,今天的单元测试代码都写在这个tag工程中;

  2. 一共写两个测试类,第一个FirstTest.java如下,可见类上有Tag注解,值为first,另外每个方法上都有Tag注解,其中first1Test方法有两个Tag注解:

package com.bolingcavalry.tag.service.impl;

import lombok.extern.slf4j.Slf4j;

import org.junit.jupiter.api.DisplayName;

import org.junit.jupiter.api.Tag;

import org.junit.jupiter.api.Test;

import org.springframework.boot.test.context.SpringBootTest;

import static org.junit.jupiter.api.Assertions.assertEquals;

@SpringBootTest

@Slf4j

@Tag(“first”)

public class FirstTest {

@Test

@Tag(“easy”)

@Tag(“important”)

@DisplayName(“first-1”)

void first1Test() {

log.info(“first1Test”);

assertEquals(2, Math.addExact(1, 1));

}

@Test

@Tag(“easy”)

@DisplayName(“first-2”)

void first2Test() {

log.info(“first2Test”);

assertEquals(2, Math.addExact(1, 1));

}

@Test

@Tag(“hard”)

@DisplayName(“first-3”)

void first3Test() {

log.info(“first3Test”);

assertEquals(2, Math.addExact(1, 1));

}

}

  1. 第二个测试类SecondTest.java,也是类和方法都有Tag注解:

package com.bolingcavalry.tag.service.impl;

import lombok.extern.slf4j.Slf4j;

import org.junit.jupiter.api.DisplayName;

import org.junit.jupiter.api.Tag;

import org.junit.jupiter.api.Test;

import org.springframework.boot.test.context.SpringBootTest;

import static org.junit.jupiter.api.Assertions.assertEquals;

@SpringBootTest

@Slf4j

@Tag(“second”)

public class SecondTest {

@Test

@Tag(“easy”)

@DisplayName(“second-1”)

void second1Test() {

log.info(“second1Test”);

assertEquals(2, Math.addExact(1, 1));

}

@Test

@Tag(“easy”)

@DisplayName(“second-2”)

void second2Test() {

log.info(“second2Test”);

assertEquals(2, Math.addExact(1, 1));

}

@Test

@Tag(“hard”)

@Tag(“important”)

@DisplayName(“second-3”)

void second3Test() {

log.info(“second3Test”);

assertEquals(2, Math.addExact(1, 1));

}

}

  • 以上就是打好了标签的测试类和测试方法了,接下来看看如何通过这些标签对测试方法进行过滤,执行单元测试有三种常用方式,咱们挨个尝试每种方式如何用标签过滤;

[](

)在IDEA中做标签过滤

  1. 如下图所示,点击红框中的Edit Configurations…:

在这里插入图片描述

  1. 如下图红框,在弹出的窗口上新增一个JUnit配置:

在这里插入图片描述

  1. 接下来的操作如下图所示,Test kind选择Tags,就会按照标签过滤测试方法,Tag expression里面填写过滤规则,后面会详细讲解这个规则,这里先填个已存在的标签important:

在这里插入图片描述

  1. 创建好JUnit配置后,执行下图红框中的操作即可执行单元测试:

在这里插入图片描述

  1. 执行结果如下,所有打了important标签的测试方法被执行:

在这里插入图片描述

[](

)用maven命令时做标签过滤

  1. 前面试过IDEA上按标签过滤测试方法,其实用maven命令执行单元测试的时候也能按标签来过滤,接下来试试;

  2. 在父工程junitpractice的pom.xml所在目录下,执行以下命令,即可开始单元测试,并且只执行带有标签的方法:

mvn clean test -Dgroups=“important”

  1. 执行完毕后结果如下:

在这里插入图片描述

  1. 翻看日志,可见只有打了important标签的测试方法被执行了,如下图红框所示:

![在这里插入图片描述](https: 需要zi料+ 绿色徽【vip1024b】

//img-blog.csdnimg.cn/20201004003730363.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JvbGluZ19jYXZhbHJ5,size_16,color_FFFFFF,t_70#pic_left)

  1. 再看看其他子工程的执行情况,用前一篇文章里的conditional为例,可见没有任何测试方法被执行,如下图红框所示:

在这里插入图片描述

  1. 再去看看surefire插件给出的测试报告,报告文件在junitpractice\tag\target\surefire-reports目录下,下图红框中的文件就是测试报告:

在这里插入图片描述

  1. 打开上图红框中的一个文件,如下图红框,可见只有打了important标签的测试方法被执行了:

在这里插入图片描述

  • 以上就是maven命令执行单元测试时使用标签过滤的方法,接下来试试在使用maven-surefire-plugin插件时如何通过做标签过滤

[](

)用surefire插件时做标签过滤

  1. surefire是个测试引擎(TestEngine),以maven插件的方式来使用,打开tag子工程的pom.xml文件,将build节点配置成以下形式,可见groups就是标签过滤节点,另外excludedGroups节点制定的hard标签的测试方法不会执行:

org.springframework.boot

spring-boot-maven-plugin

maven-surefire-plugin

2.22.2

最后

由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!

小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》

maven-surefire-plugin

2.22.2

最后

由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!

[外链图片转存中…(img-Ib7qgYl3-1710359474758)]

小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》

[外链图片转存中…(img-rlxjx9HL-1710359474759)]

  • 22
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值