单元测试 - 注解篇

news2024/12/23 1:50:35

1. @RunWith 指定单测的运行环境

  • @RunWith(JUnit4.class) - JUnit4环境
  • @RunWith(MockitoJUnitRunner.class) - Mock环境
  • @RunWith(SpringJUnit4ClassRunner.class) / @RunWith(SpringRunner.class) - Spring环境  ps: SpringJUnit4ClassRunner 与 SpringRunner区别
    • SpringRunner继承自SpringJUnit4ClassRunner,无额外扩展
    • junit 4.12之前的版本只能用SpringJUnit4ClassRunner, 4.12之后的可以用
    • 未显式指定@RunWith的情况下,Junit使用默认的Runner(JUnit4.4之后 - BlockJunit4ClassRunner,JUnit4.4之前 - Junit4ClassRunner)
  • @RunWith(Suite.class) - 一套测试集合 (未研究

2. @ContextConfiguration  指定spring环境的相关配置,例如扫描路径 / 类等,加载ApplicationContext,启动spring容器,搭配@RunWith(SpringRunner.class)使用

  • @ContextConfiguration(classes = SimpleConfiguration.class)
  • @ContextConfiguration(locations = { "classpath:spring1.xml", "classpath:spring2.xml" }) 

3. @SpringBootTest - 作用同@ContextConfiguration

  • 与@ContextConfiguration区别:无需显示指定locations或classes, @SpringBootTest注解会自动会从当前包开始,逐级向上查找被@SpringBootApplication或@SpringBootConfiguration注解的类
  • 包含了@ExtendWith({SpringExtension.class})注解,使用的@SpringBootTest后无需再指定Spring Runner,即不用再使显式用@RunWith(SpringRunner.class)  / @ExtendWith({SpringExtension.class})

4. @ExtendWith - Junit5中的注解,等同于@RunWith

可以在@RunWith基础上进行扩展,利用一个Test及需要Spring环境又需要Mock环境

@RunWith(MockitoJUnitRunner.class)
@ExtendWith(MockitoExtension.class)
public class Test {

}

5. @AutoConfigureMockMvc

等同于mockMvc = MockMvcBuilders.standaloneSetup(xxController).build();

6. @WebMvcTest(xx.class) - 测试Controller

  • 此注解中已经引入了@AutoConfigureMockMvc,也就是说可以注解注入MockMvc
  • 配合@RunWith(SpringRunner.class) ,只会加载在@WebMvcTest注解上指定的class
  • 如果有需要mock的对象,配合@MockBean使用

最简单的单元测试 - 直接在方法上使用@Test注解即可

@Test
public void test() {

}

mock场景

普通方法的mock
1. 编程方式
@Before
public void setUp() throws Exception {
    MockitoAnnotations.openMocks(this);
}
2. 注解方式,在整个测试类上添加注解 @RunWith(MockitoJUnitRunner.class)

3. 在1或2的基础上配合 @InjectMocks、@Mock

mvc的mock,主要为了构造MockMvc 
1. 编程方式
public class Test {
    @Autowired
    MockMvc mockMvc;

    @Before
    public void setup() {
        mockMvc = MockMvcBuilders.standaloneSetup(xxController).build();
    }
}


2. 在整个类上使用注解@AutoConfigureMockMvc
@AutoConfigureMockMvc
public class Test {
    @Autowired
    MockMvc mockMvc;
}
3. 在1或2基础上配合@InjectMocks、@Mock、 @Autowired MockMvc


参考 

SpringBoot Test及注解详解 - codedot - 博客园 (cnblogs.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/509219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Gradio的web界面演示与交互机器学习模型,分享应用《3》

Gradio的web界面演示与交互机器学习模型,安装和使用《1》https://blog.csdn.net/weixin_41896770/article/details/130540360Gradio的web界面演示与交互机器学习模型,主要特征《2》https://blog.csdn.net/weixin_41896770/article/details/130556692 前…

pywinauto使用教程

这里写自定义目录标题 引入pycharm项目新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个注脚注…

JDK的版本迭代(JDK9 - JDK20)

文章目录 1. 发布特点2. 名词解释Oracle JDK和Open JDKJEPLTS 3. 各版本支持时间路线图4. 各版本介绍jdk 9jdk 10jdk 11jdk 12jdk 13jdk 14jdk 15jdk 16jdk 17jdk 18jdk 19jdk 20 5. JDK各版本下载链接6. 应该如何学习新特性 1. 发布特点 发行版本发行时间备注Java 1.01996.01…

[Java]JavaWeb学习笔记(动力节点老杜2022)【Javaweb+MVC架构模式完结】

文章目录 🥽 视频对应资料🥽 Tomcat服务器🌊 下载与安装🌊 关于Tomcat服务器的目录🌊 启动Tomcat🌊 实现一个最基本的web应用(这个web应用中没有java小程序) 🥽 静态资源…

(附源码)springboot学生宿舍管理系统 毕业设计 211955

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中,应用软件的工作…

人工智能AI到底能AI到什么程度?

作为引领新一轮科技革命和产业变革的重要驱动力,人工智能催生了大批新产品、新技术、新业态和新模式。日前,全新的聊天机器人模型ChatGPT因其强大的语言理解和文本生成能力,引发自“阿尔法狗”后大众对人工智能的第二波关注高潮。 据悉&…

Java笔记_14(集合进阶2)

Java笔记_14 一、双列集合1.1、Map的常见API1.2、Map遍历方式一(键找值)1.3、Map集合遍历方法二(键值对)1.4、Map集合遍历方法三(lambda表达式)1.5、HashMap1.6、HashMap练习1.7、HashMap底层源码解析1.8、…

【ChatGPT】ChatGPT+飞书,打造智能问答助手

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员,2024届电子信息研究生 目录 前言 环境列表 视频教程 1.飞书设置 2.克隆feishu-chatgpt项目 3.配置config.yaml文件 4.运行feishu-chatgpt项目 5.安装cpolar内网穿透 6.固定公网地址 7.机器人权限配…

Unity本地化:添加多语言支持

文档:Quick Start Guide | Localization | 1.2.1 (unity3d.com) /**************************************************** 文件:LocaleSelector.cs 作者:Edision 日期:#CreateTime# 功能:语言本地化 *…

vue脚手架(vue-cli)详细安装过程

CLI,俗称脚手架。全称是Command Line Interface。 vue-cli 是vue官方发布的开发vue项目的脚手架。 vue脚手架用于自动生成vue和webpack的项目模板,是一个快速构建vue项目的工具,可以自动安装vue所需要的插件,避免手动安装各种插件…

camunda执行监听器和任务监听器有什么区别

Camunda的执行监听器和任务监听器是用于添加自定义逻辑的监听器,它们的区别在于作用对象和触发事件的不同。 执行监听器是与BPMN流程中的各种流程元素(例如开始事件、用户任务、服务任务、网关等)相关联的。执行监听器可以在流程元素执行前、…

德邦快递:逆境之下,让数字化辅助业务的利润增长

#01行业背景 2022年,我国快递业务量完成 1105.8 亿件,业务量连续 9 年位居世界第一,仅用七年时间,中国的快递行业就完成了从百亿到千亿的十倍增长。我国快递物流行业正从蓝海进入红海,在下半场激烈竞争中破局的关键在…

线上问题-CPU使用频率飙升

描述 中午收到群内人员反馈环境访问速度慢。登录验证码打不开等问题。通过查看日志发现是kafka出现问题,无法处理消息。联系运维解决。在排查的过程中使用mobaXterm连接服务器。左下角看到CPU使用频率非常高。于是记录一下通过CPU查看程序占用情况分析问题。 过程 …

各大厂与卡顿和ANR的战斗记录篇

作者:Drummor 1.1 认识ANR 1.1.1 系统如何处理ANR 设计原理和影响因素篇,主要对以下关键问题展开 ANR触发的条件以及根本原因发生ANR之后,系统处理ANR的流程。应用层如何判定ANR:对ANR的感知,通过监听SIGQUIT信号。…

直播合辑 | 微软ATP与您相约100场公益演讲

(本文阅读时间:5 分钟) Public100已历经了近一年的春夏秋冬,截止目前我们一共举办33场公益直播,由微软及合作伙伴中从事 AI 相关工作的工程师、产品经理、市场总监、运营经理等各类专家和学者,分享自己在学…

IPC机制之管道

每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走…

一行代码绘制高分SCI火山图

一、概述 在近半年中,我读了很多的高分SCI文章,很多文章中都有多种不同的火山图,包括「普通的火山图、渐变火山图、以及包含GO通路信息的火山图」! 经过一段时间的文献阅读和资料查询,终于找到了一个好用而且简单的包…

烽火HG680KA-Hi3798MV300-当贝纯净桌面-卡刷固件包

烽火HG680KA-Hi3798MV300-当贝纯净桌面-卡刷固件包-内有教程 特点: 1、适用于对应型号的电视盒子刷机; 2、开放原厂固件屏蔽的市场安装和u盘安装apk; 3、修改dns,三网通用; 4、大量精简内置的没用的软件&#xff…

乳杆菌属Lactobacillus——维持肠道和阴道健康不可忽缺的角色

谷禾健康 乳杆菌属(Lactobacillus)是厚壁菌门乳杆菌科下的一类革兰氏阳性菌,最早于19世纪在酸奶中发现。 乳杆菌在自然界中分布很广,在植物体表、乳制品、肉制品、葡萄酒、发酵面团、污水以及人畜粪便中,均可分离到。在…

dubbo高级特性分析

1.dubbo多协议支持 某些场景下,可能接口是使用的老的协议去发布的,此时希望接口能够以一种新的协议去发布,老的服务按照老的协议去调用,新的服务按照新的协议去调用 而dubbo服务就可以支持发布多种协议,如 dubbo / he…