当前位置: 首页 > article >正文

mockito加junit gd 单元测试 笔记

目录

    • 一、简介
      • 1.1 单元测试的特点
      • 1.2 mock类框架使用场景
      • 1.3 常用mock类框架
        • 1.3.1 mockito
        • 1.3.2 easymock
        • 1.3.3 powermock
        • 1.3.4 JMockit
    • 二、mockito的单独使用
      • 2.1 mock对象与spy对象
      • 2.2 初始化mock/spy对象的方式
      • 2.3 参数匹配
      • 2.4 方法插桩
      • 2.5 @InjectMocks注解的使用
      • 断言工具
    • 三、实战讲解
    • 四、mockito在springboot环境使用(不推荐)

mockito加junit搞定单元测试

一、简介

1.1 单元测试的特点

  • 配合断言使用(杜绝System.out) 。
  • 可重复执行 。
  • 不依赖环境 。
  • 不会对数据产生影响。
  • spring的上下文环境不是必须的 。
  • 一般都需要配合mock类框架来实现。

1.2 mock类框架使用场景

要进行测试的方法存在外部依赖(如db,redis,第三方接口调用等),为了能够专注于对该方法(单元)的逻辑进行测试,就希望能虚拟出外部依赖,避免外部依赖成为测试的阻塞项。一般单元测试都是针对service层。

1.3 常用mock类框架

mock类框架:用于mock外部依赖

1.3.1 mockito

名称:ito:input to output
官网:https://site.mockito.org
官网文档:https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.htm
限制:老版本对于final class、final method、static method、private method 均不能被 mockito mock。目前已支持final class、final method、static method 的 mock,具体可以参考官网
原理:bytebuddy 教程:https://www.bilibili.com/video/BV1G24y1a7bd

1.3.2 easymock
1.3.3 powermock

官网:https://github.com/powermock/powermock
与 mockito 的版本支持关系:https://gitee.com/mirrors/powermock/wikis/Mockito#supported-versions
对 mockito 或 easymock 的增强

1.3.4 JMockit

二、mockito的单独使用

2.1 mock对象与spy对象

方法插桩方法不插桩作用对象最佳实践
mock对象执行插桩逻辑返回mock对象的默认值类、接口被测试类或其依赖
spy对象执行插桩逻辑调用真实方法类、接口被测试类

2.2 初始化mock/spy对象的方式

方法一方法二方法三
junit4@RunWith(MockitoJUnitRunner.class) +@Mock等注解Mockito.mock(X.class)等静态方法MockitoAnnotations.openMocks(this)+@Mock等注解
junit5@ExtendWith(MockitoExtension.class) + @Mock等注解Mockito.mock(X.class)等静态方法MockitoAnnotations.openMocks(this)+@Mock等注解

2.3 参数匹配

2.4 方法插桩

指定调用某个方法时的行为(stubbing),达到相互隔离的目的

  • 返回指定值
  • void返回值方法插桩
  • 插桩的两种方式
    • when(obj.someMethod()).thenXxx():其中obj可以是mock对象
    • doXxx().when(obj).someMethod():其中obj可以是mock/spy对象或对无返回值的方法进行插桩
  • 抛异常
  • 多次插桩
  • thenAnswer
  • 执行真正的原始方法
  • verify的使用

2.5 @InjectMocks注解的使用

  • 作用:若此注解声明的变量需要用到mock/spy对象, mockito会自动当前类里的mock或spy成员
  • 原理:构造器注入、setter注入、字段反射注入

断言工具

hamcrest:junit4中引入的第三方断言库,junit5中被移出,从1.3版本后,坐标由org.hamcrest:hamcrest-core变为org.hamcrest:hamcrest,用的少
assertj:常用的断言库
junit4原生断言
junit5原生断言

三、实战讲解

四、mockito在springboot环境使用(不推荐)

生成的对象受spring管理
@MockBean

  • 类似@Mock
  • 用于通过类型或名字替换spring容器中已经存在的bean,从而达到对这些bean进行mock的目的

@SpyBean

  • 作用类似@Spy
  • 用于通过类型或名字包装spring容器中已经存在的bean,当需要mock被测试类的某些方法时可以使用

在这里插入图片描述
真要mock私有方法,使用powermock
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


http://www.kler.cn/a/152353.html

相关文章:

  • 防火墙补充NAT
  • Flask学习二:项目拆分、请求与响应、cookie
  • 设计模式之装饰模式(2)--有意思的想法
  • Python与设计模式--解释器模式
  • Android UiAutoMatorViewer打不开
  • Nginx(八) aio sendfile directio 组合使用测试(1)
  • Pycharm中使用matplotlib绘制动态图形
  • Electron+Ts+Vue+Vite桌面应用系列:sqlite增删改查操作篇
  • Flutter应用程序的加固原理
  • 一些小笔记(Delphi)
  • cephadm部署ceph quincy版本,使用ceph-csi连接
  • [读论文][跑代码]BK-SDM: A Lightweight, Fast, and Cheap Version of Stable Diffusion
  • 设计模式总目录
  • 17.PIL报错`AttributeError: module ‘PIL.Image‘ has no attribute ‘ANTIALIAS‘`
  • NX二次开发UF_MTX2_copy 函数介绍
  • 数学建模-基于脑出血患者院前指标的多种机器学习预测模型构建及比较研究
  • 双向ESD保护 汽车级TVS二极管 ESD9B3.3ST5G工作原理、特性参数、封装形式
  • 数据结构-04-队列
  • 单片机AVR单片机病房控制系统设计+源程序
  • 阶段三:Web开发(学习如何使用Cookie和Session进行用户认证)