Junit 5 如何使用 Guice DI

news/2024/4/24 20:59:32/文章来源:https://blog.csdn.net/huyuchengus/article/details/130334123

Guice 是一个依赖注入的小清新工具。

相比 Spring 的依赖管理来说,这个工具更加小巧,我们可以在测试中直接使用。

Junit 5

在 Junit 中使用就没有那么方便了,因为 Junit 没有 Guice 的注解。

你需要手动写一个类,在这个类中,对 Injector 的模块进行配置。

例如我们下面的代码:

package com.ossez.wechat.oa.api.test;import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.ossez.wechat.common.exception.WxRuntimeException;
import com.ossez.wechat.oa.api.WeChatOfficialAccountService;
import com.ossez.wechat.oa.api.impl.okhttp.WeChatMsgService;
import com.ossez.wechat.oa.api.impl.okhttp.WeChatOfficialAccountServiceOkHttp;
import org.apache.commons.lang3.ObjectUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import org.junit.jupiter.api.BeforeAll;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.IOException;
import java.io.InputStream;
import java.util.concurrent.locks.ReentrantLock;/*** Init Guice DI** @author YuCheng*/
public class TestBase {private static final Logger log = LoggerFactory.getLogger(TestBase.class);private static final String TEST_CONFIG_XML = "test-config.xml";private static final Injector injector = Guice.createInjector(new AbstractModule() {@Overridepublic void configure() {try (InputStream inputStream = ClassLoader.getSystemResourceAsStream(TEST_CONFIG_XML)) {if (ObjectUtils.isEmpty(inputStream)) {throw new WxRuntimeException("测试配置文件【" + TEST_CONFIG_XML + "】未找到,请参照test-config-sample.xml文件生成");}// Init WeChat config for testingDocument document = new SAXReader().read(inputStream);TestConfigStorage config = new TestConfigStorage();config.setAppId(document.getRootElement().element("appId").getText());config.setSecret(document.getRootElement().element("secret").getText());config.setToken(document.getRootElement().element("token").getText());config.setOpenid(document.getRootElement().element("openid").getText());config.setAccessTokenLock(new ReentrantLock());// Init WeChat ServiceWeChatOfficialAccountService weChatOfficialAccountService = new WeChatOfficialAccountServiceOkHttp();weChatOfficialAccountService.setWxMpConfigStorage(config);weChatOfficialAccountService.addConfigStorage("another", config);// Init WeChatMsgServiceWeChatMsgService weChatMsgService = new WeChatMsgService(weChatOfficialAccountService);bind(TestConfigStorage.class).toInstance(config);bind(WeChatOfficialAccountService.class).toInstance(weChatOfficialAccountService);bind(WeChatMsgService.class).toInstance(weChatMsgService);} catch (IOException e) {log.error(e.getMessage(), e);} catch (DocumentException e) {throw new RuntimeException(e);}}});@BeforeAllpublic void setup() {injector.injectMembers(this);}
}

在这个代码中,我们定义了一个 TestBase 的类,然后在测试启动的时候对齐进行了初始化和配置。

最主要的就是这个方法:`private static final Injector injector = Guice.createInjector(new AbstractModule() {}

在测试中使用

在测试中使用就比较简单了。

首先需要继承这个 TestBase,然后对需要的类进行注入后就可以直接使用了。

如上图,注入后直接使用。

Junit 5 如何使用 Guice DI - 测试发布 - OSSEZGuice 是一个依赖注入的小清新工具。 相比 Spring 的依赖管理来说,这个工具更加小巧,我们可以在测试中直接使用。 Junit 5在 Junit 中使用就没有那么方便了,因为 Junit 没有 Guice 的注解。 你需要手动写一个类,在这个类中,对 Injector 的模块进行配置。 例如我们下面的代码: package com.ossez.wechat.oa.api.test;import com.goog…https://www.ossez.com/t/junit-5-guice-di/14395

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ABeam Insight | 智能制造系列(6):虚拟/增强现实(VR/AR)×智能制造

虚拟现实(VR)和增强现实(AR)的概念早在20世纪60年代就被提出,但由于当时的技术水平无法满足相关应用的需求,这些概念并没有引起广泛关注。直到近年来随着计算机技术的飞速发展,虚拟现实和增强现…

nodejs+vue 文旅旅游公司智能管理OA系统

通过本次设计,让我学到了更多的知识,而且在设计中会有一些问题出现,最后通过查阅资料和在老师和同学的帮助下完成了系统的设计和开发,使得这次系统的开发非常的有意义。同时通过这次系统的设计也让我明白了自己在哪方面有不足&…

【PWN刷题__ret2text】[CISCN 2019华北]PWN1

ret2text~ 前言 依旧是简单的ret2text 一、checksec查看 No canary found 没有开启栈溢出保护 二、IDA反汇编 双击进入func() 发现后门函数system("cat/flag");根据语义,函数提供了修改v1,判断v2是否等于11.28125,如…

项目沟通管理5大技巧 第4个很重要

1、充分使用twitter管理沟通模型 项目沟通会议可以充分使用witter的管理沟通模型,提高会议沟通效率。使用此模型,主要是有三步: 第一步:倾听,项目经理需要保持中立的立场,不先表态,让团队成员畅…

SAP ABAP 使用SICF发布HTTP API接口

一、SE24创建类:Z_HCX_HTTP 1、创建类: 2、切换到接口(interface)页签,输入IF_HTTP_EXTENSION ,回车。切换到方法(method)页签,双击IF_HTTP_EXTENSION~HANDLE_REQUEST进…

STM32 产生随机数方式

STM32 产生随机数方式 C语言的stdlib.h库里的srand(unsigned seed)和rand(void)函数,可以配合产生伪随机数。其中srand(seed)产生算法种子,再由rand()通过算法产生随机数,产生的随机数在宏定义RAND_MAX范围内。如果seed不变,则产…

URL 转为QR code(二维码)

推荐一个良心的网站,能够免费地将url、text编码为二维码,而且还能设计logo、颜色等。 https://www.the-qrcode-generator.com/ 如下图: 可以自己定义logo、颜色: 还能查看扫描历史等统计信息: 上述所有功能都是免…

【虚拟仿真】Unity3D打包WEBGL后播放视频(VideoPlayer组件)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 本篇文章实现Unity3D打包WEBGL后播放视频,如下图所…

VGG网络与中间层特征提取

1. 背景 VGG是常见的用于大型图片识别的极深度卷积网络, 这里主要介绍VGG网络预测在ImageNet数据集上的训练及预测。 2. ImageNet图像数据集简介 ImageNet包含了145W张224*224像素的三通道彩色图像数据集,图像划分为1000个种类。其中训练集130W张&…

Observability:添加免费和开放的 Elastic APM 作为 Elastic 可观察性部署的一部分 - 8.x

作者:David Hope 在最近的一篇博文中,我们向你展示了如何开始使用 Elastic 可观察性的免费开放层。 下面,我们将介绍你需要做些什么来扩展你的部署,这样你就可以开始免费从应用程序性能监控(APM)或跟踪集群…

可算是熬出头了,测试4年,费时8个月,入职阿里,涨薪14K

前言 你的努力,终将成就无可替代的自己。 本科毕业后就一直从事测试的工作,和多数人一样,最开始从事点点点的工作,看着自己的同学一步一步往上走,自己还是在原地踏步,说实话这不是自己想要的状态。 一年半…

为什么你永远不应该在CSS中使用px来设置字体大小

代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug。 在Josh Collinsworth的博客文章“永远不要用px作为字体大小”中,作者讨论了为什么不…

Ceph入门到精通-Ceph 编排器简介

第 1 章 Ceph 编排器简介 作为存储管理员,您可以将 Ceph 编排器与 Cephadm 实用程序搭配使用,能够发现设备并在 Red Hat Ceph Storage 集群中创建服务。 1.1. 使用 Ceph Orchestrator Red Hat Ceph Storage Orchestrators 是经理模块,主要…

C语言函数大全-- o 开头的函数

C语言函数大全 本篇介绍C语言函数大全-- o 开头的函数 1. obstack_init,obstack_free,obstack_alloc,obstack_blank,obstack_grow 1.1 函数说明 函数声明函数功能void obstack_init(struct obstack *obstack_ptr);它是 POSIX …

TypeScript自学笔记

目录 1.什么是Ts? 1.1 设计公司:微软 1.2 TS概述 1.3 TS是静态类型 JS是动态类型 1.4 TS是强类型语言 JS是弱类型语言 2.TypeScript编译器 2.1 安装 2.2 TS自动编译和编译选项设置 3.TS的数据类型 3.1 基础数据类型number、string、boolean 3.2 Arrays&a…

美颜sdk开发实践:如何构建美颜sdk功能?

美颜功能是现今很多应用中必不可少的一项功能。而要实现美颜功能,除了自己编写美颜算法外,还可以使用美颜sdk来实现。本文将介绍如何从零开始构建美颜功能,利用美颜sdk实现美颜效果。 一、简介 美颜sdk可以向用户提供多种美颜效果&#xff…

大学生用什么蓝牙耳机好?2023好用的蓝牙耳机推荐

近几年,蓝牙耳机市场不断扩大,逐渐取代有线耳机成为最受人欢迎的数码产品之一。作为蓝牙耳机主要受众群的大学生,用什么蓝牙耳机比较好呢?下面,我来给大家推荐几款便宜好用的蓝牙耳机,一起来看看吧。 一、…

stm32读写内部Flash

stm32内部flash地址架构映射 因为我的stm32f407的内部flash是1M的所以块2不存在,但他的地址仍然存在,只是没有作用,这是stm32的整体框架。 主存储器 一般我们说 STM32 内部 FLASH 的时候,都是指这个主存储器区域,它…

生成树协议三姐妹:STP、RSTP 和 MSTP,附思科和华为双厂商命令示例

在计算机网络中,为了保证网络拓扑结构的稳定性和可靠性,需要采用一些协议进行网络的管理和控制。其中,STP、RSTP 和 MSTP 是三种常用的网络管理协议。本文将分别介绍这三种协议,并且使用华为、思科两家厂商作为案例给出相应的命令…

数据库之约束、索引和事务

一、约束 约束,顾名思义就是数据库对数据库中的数据所给出的一组检验规则.负责判断元素是否符合数据库要求.其目的就是为了提高效率以及准确性. 1.not null - > 数据元素非空 表示如果插入数据,则当前数据不能为空. //创建一张学生表,其班级id和年级id不为空 create …