java多线程实战项目,JUnit5技术分享

  • Junit Platform (公共测试平台): 基础核心内容 ,不包括单元测试的一些测试引擎

  • JUnit Junpiter(核心测试引擎): 是JUnit5 新特性的核心。内部包含了一个测试引擎,用于在JunitPlatform上运行

  • JUnit Vintage:兼容JUnit4 JUnit3

@springBootTest

class BootWeb{

@Test

void contextLoads(){

}

}

org.springframework.boot

spring-boot-starter-test

test

注意: Springboot2.4 欧尚的版本移除了对Vintage 的依赖

不能使用Junit4 (如果需要兼容 要自行引入)

兼容JUnit4

org.junit.vintage

junit-vintage-engine

test

org.hamcrest

hamcrest

@Test org.junit.jupiter.api —5

@Test org.junit —4


以前@SpringBoot

@Test标注

Junit类具有Spring功能 ,@Autowired ,例如@T然撒村缇欧哪里标注测试方法,测试完成后自动回滚


一,JUnit5常用注解


https://junit.org/junit5/docs/current/user-guide/#writing-tests-annotations

  1. @DisplayName

在这里插入图片描述

package com.yer.boot;

import org.junit.jupiter.api.DisplayName;

import org.junit.jupiter.api.Test;

@DisplayName(“junit5 功能测试类”)

public class JUnit5Test {

@DisplayName(“测试displayname注解”)

@Test

void testDisplayName(){

System.out.println(999);

}

}

  1. @BeforeEach

@AfterEach

@BeforeAll

@AfterAll

package com.yer.boot;

import org.junit.jupiter.api.*;

@DisplayName(“junit5 功能测试类”)

public class JUnit5Test {

@DisplayName(“测试displayname注解”)

@Test

void testDisplayName() {

System.out.println(999);

}

@DisplayName(“测试displayname注解2”)

@Test

void testDisplayName2() {

System.out.println(9992);

}

@BeforeEach

//每个单元测试之前都要执行

void testBeforeEach() {

System.out.println(“测试要开始了!”);

}

@AfterEach

//每个单元测试之后都要执行

void testAfterEach() {

System.out.println(“测试结束了”);

}

@BeforeAll

static void testBeforeAll() {

System.out.println(“要测试所有测试了”);

}

@AfterAll

static void testAfterAll() {

System.out.println(“所有测试测试完了”);

}

}

  1. @Tag 表示单元测试类别,类似于JUni4中的@Categories

  2. @Disable 不用执行

在这里插入图片描述

  1. @Timeout

/**

  • 规定方法的超时时间

  • 超出时间测试异常

  • @throws InterruptedException

*/

@Timeout(value = 500,unit = TimeUnit.MILLISECONDS)

@Test

void testTimeout() throws InterruptedException {

Thread.sleep(1000);

}

  1. @ExtendWIth:为测试类或测试方法提供扩展类引用 (类似于junit4@RunWith)

@SpringBootTest 复合注解中有@ExtendWIth(SpringExtension.class)

  1. @RepeatTest(8) 重复测试

二,断言assertions


断言是测试方法中的核心部分,用来对测试需要满足的条件进行验证

这些断言方法都是org.junit.jupiter.api.Assertions中的静态方法

JUnit5 内置的断言可以分成以下几个类别:检查业务逻辑返回的数据是否合理

得益于断言机制,所有的测试结束之后会有一个详细报告

1.简单断言

对单个值进行简单验证

@DisplayName(“测试简单断言”)

@Test

void testSimpleAssertions(){

int cal = cal(3,3);

assertEquals(6,cal);

}

int cal(int i,int j){

return i+j;

}

//成功

=======================================

/**

  • 断言

  • 前面断言失败,后面代码不会执行

*/

@DisplayName(“测试简单断言”)

@Test

void testSimpleAssertions(){

int cal = cal(2,3);

assertEquals(6,cal,“业务逻辑计算失败”);

Object o1 = new Object();

Object o2 = new Object();

assertEquals(o1,o2,“两个对象不一样”);

}

int cal(int i,int j){

return i+j;

}

2.数组断言

来判断两个对象或者原始类型的数组是否相等

@Test

@DisplayName(“array assertion”)

public void array(){

assertArrayEquals(new int[]{1,2},new int{1,2});

}

3.组合断言

assertAll方法接收多个org.junit.jupiter.api.Executable函数式接口的实例作为要验证的断言,可以通过lambda表达式 很容易的提供这些断言

@Test

@DisplayName(“组合断言”)

void all(){

assertAll(“test”,

()->assertTrue(true&&true,“结果不为true”),

()->assertEquals(1,1,“结果不为1”));

system.out.println(“两个断言都成功才可以输出”)

}

4.异常断言

在junit4时期 ,想要检测方法异常情况时,需要用注解@Rule注解的@ExpectedException变量还是比较麻烦的。相对于现在的Junit5提供了一种新的断言方式Assertions.assertThrows(),配合函数式编程就可以进行使用

断定业务逻辑一定出现异常

@Test

@DisplayName(“异常断言”)

void testException(){

assertThrows(ArithmeticException.class,

()-> { int i = 1/0;},“业务逻辑竟然能正常运行,不是吧”);

}

5.超时断言

还提供了Assertions.assertTimout()为测试方法设置了超时时间

@Test

@DisplayName(“超时断言”)

public void timeOut(){

//如果测试方法时间超过1s

Assertions.assertTimeout(Duration.ofMillis(1000),

()->Thread.sleep(500));

}

6.快速失败

通过fail方法直接使得测试失败

@Test

@DisplayName(“快速失败”)

void testFai(){

if (2 == 2 ){

fail(“测试失败”);

}

}


三,前置条件(assumptions)

JUnit5中的前置条件(assunption假设)类似于断言,不同之处在于不满足的断言会使得测试方法失败,而不满足的前置条件只会使得测试方法执行终止。

前置条件爱你可以堪称是测试方法执行的前提,当该前提不满足时,就没有继续执行的必要l

@DisplayName(“测试前置条件”)

@Test

void testAsummptions(){

Assumptions.assumeTrue(false,“结果不是true”);

System.out.println(“为true”);

}

disable 跳过

假设失败跳过


四,嵌套测试

-----------可参考官方文档

junit可以通过加入了嵌套测试

嵌套测试情况下

外层的Test不能驱动内层的Before(After)Each/All主类的方法提前/之后运行

内层的可以驱动外层的

package com.yer.boot;

import org.junit.jupiter.api.BeforeEach;

import org.junit.jupiter.api.DisplayName;

import org.junit.jupiter.api.Nested;

import org.junit.jupiter.api.Test;

import java.util.EmptyStackException;

import java.util.Stack;

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

@DisplayName(“嵌套测试”)

public class TestAStackDemo {

Stack stack;

@Test

@DisplayName(“new Stack()”)

void isInstantiatedWithNew() {
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

写在最后

学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

最后再分享的一些BATJ等大厂20、21年的面试题,把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌

Mybatis面试专题

蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌

MySQL面试专题

蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌

并发编程面试专题

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

写在最后

学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

最后再分享的一些BATJ等大厂20、21年的面试题,把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

[外链图片转存中…(img-YPgqOqIx-1713438987333)]

Mybatis面试专题

[外链图片转存中…(img-g5lD43WY-1713438987334)]

MySQL面试专题

[外链图片转存中…(img-2wBhI83t-1713438987334)]

并发编程面试专题

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值