最全JUnit5技术分享,mybatis工作原理面试

总结

面试难免让人焦虑不安。经历过的人都懂的。但是如果你提前预测面试官要问你的问题并想出得体的回答方式,就会容易很多。

此外,都说“面试造火箭,工作拧螺丝”,那对于准备面试的朋友,你只需懂一个字:刷!

给我刷刷刷刷,使劲儿刷刷刷刷刷!今天既是来谈面试的,那就必须得来整点面试真题,这不花了我整28天,做了份“Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法等”

image

且除了单纯的刷题,也得需准备一本【JAVA进阶核心知识手册】:JVM、JAVA集合、JAVA多线程并发、JAVA基础、Spring 原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB、Cassandra、设计模式、负载均衡、数据库、一致性算法、JAVA算法、数据结构、加密算法、分布式缓存、Hadoop、Spark、Storm、YARN、机器学习、云计算,用来查漏补缺最好不过。

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

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() {

new Stack<>();

}

@Nested

@DisplayName(“when new”)

class WhenNew {

@BeforeEach

void createNewStack() {

stack = new Stack<>();

}

@Test

@DisplayName(“is empty”)

void isEmpty() {

assertTrue(stack.isEmpty());

}

@Test

@DisplayName(“throws EmptyStackException when popped”)

void throwsExceptionWhenPopped() {

assertThrows(EmptyStackException.class, stack::pop);

}

@Test

@DisplayName(“throws EmptyStackException when peeked”)

void throwsExceptionWhenPeeked() {

assertThrows(EmptyStackException.class, stack::peek);

}

@Nested

@DisplayName(“after pushing an element”)

class AfterPushing {

String anElement = “an element”;

@BeforeEach

void pushAnElement() {

stack.push(anElement);

}

@Test

@DisplayName(“it is no longer empty”)

void isNotEmpty() {

assertFalse(stack.isEmpty());

}

@Test

@DisplayName(“returns the element when popped and is empty”)

void returnElementWhenPopped() {

assertEquals(anElement, stack.pop());

assertTrue(stack.isEmpty());

}

@Test

总结

无论是哪家公司,都很重视高并发高可用的技术,重视基础,重视JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

最后我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。

面试了阿里,滴滴,网易,蚂蚁,最终有幸去了网易【面试题分享】

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

(“returns the element when popped and is empty”)

void returnElementWhenPopped() {

assertEquals(anElement, stack.pop());

assertTrue(stack.isEmpty());

}

@Test

总结

无论是哪家公司,都很重视高并发高可用的技术,重视基础,重视JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

最后我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。

[外链图片转存中…(img-9E8LsozH-1715574773377)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值