搭建大型分布式服务(四十六)利用mockito不启动SpringBoot项目下进行单元测试

这篇具有很好参考价值的文章主要介绍了搭建大型分布式服务(四十六)利用mockito不启动SpringBoot项目下进行单元测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

springboot单元测试不启动整个项目,分布式,java,spring boot,单元测试,java

前言

SpringBoot支持集成Mockito做单元测试,有时候SpringBoot有很多外部依赖,在本地很难启动或者启动时间很长,而我们只想对某个方法进行测试,需要怎样做呢?


一、本文要点

接前文,我们已经已介绍在两种mock模式下,怎样根据入参返回自定义mock结果,但都是通过启动SpringBoot项目来运行的。本文将介绍不启动SpringBoot的情况下运行单元测试。
系列文章完整目录

  • SpringBooot 单元测试
  • Mockito 单元测试
  • Mock、Spy 单元测试
  • InjectMocks 注入深层依赖

二、开发环境

  • jdk 1.8
  • maven 3.6.2
  • springboot 2.4.3
  • idea 2020
  • junit5
  • Mockito

三、编写真实类

1、编写真实Service类TagService.java,它依赖ElasticeService类,模拟真实应用场景。

@Slf4j
@Getter
@Service("tagService")
public class TagService {

    // 操作远程ES工具类
	private ElasticeService elasticService;
	
	// 依赖ES工具类实现逻辑
    public String listTags(String bId) {
        return elasticService.list(bId);
    }
}

2、编写真实service类ElasticService.java,它依赖restHighLevelClientProxy类,模拟操作es工具类。

@Slf4j
@Getter
@Service("elasticService")
public class ElasticeService {

	@Resource
	private RestHighLevelClientProxy proxy;
	
	// 依赖ES工具类实现逻辑
    public String listTags(String bId) {
        // 远程调用
        SearchResponse searchResponse = restHighLevelClientProxy.search(bId);
        // 其他逻辑
        return "";
    }
}

四、编写测试类

1、@InjectMocks 用来注入依赖类,这里不再使用SpringExtension启动单元测试类,而是使用MockitoJUnitRunner类。

@Slf4j
@ActiveProfiles("dev")
@RunWith(MockitoJUnitRunner.class)
class TagServiceTest {

    /**
     * 这里使用MockBean,tagService中所有方法都会被mock掉.
     */
    @InjectMocks
    private TagService tagService;
    
    // 依赖的操作远程ES工具类,直接mock掉
    // @Mock跟上一篇文章介绍的@MockBean类似
    @Mock
	private ElasticeService elasticService;

   @Before
    public void setup() {
    	// 启用注解
        MockitoAnnotations.initMocks(this);
    }

	
    @Test
    void buildTagName() {

      Mockito.when(elasticService.listTags(Mockito.any())
                .thenReturn(mockResult());
                
        String bid = "45345xclm34kxjL";

        log.info(tagService.listTags(bid));

    }
}

2、如果我们只想mock掉RestHighLevelClientProxy类,还想测试ElasticeService类的逻辑,这时候需要处理深度依赖,也就是需要把proxy也注入。

@Slf4j
@ActiveProfiles("dev")
@RunWith(MockitoJUnitRunner.class)
class TagServiceTest {

    /**
     * 这里使用MockBean,tagService中所有方法都会被mock掉.
     */
    @InjectMocks
    private TagService tagService;
    
   @Before
    public void setup() {
    	// 启用注解
        MockitoAnnotations.initMocks(this);
    }

    
    // 注入内层依赖,@Spy跟上一篇文章介绍的@SpyBean类似
    @Spy
    @InjectMocks
	private ElasticeService elasticService;
	
	// mock掉
	@Mock
    private RestHighLevelClientProxy proxy;
    
    @Test
    void buildTagName() {

      Mockito.when(proxy.listTags(Mockito.any())
                .thenReturn(mockResult());
                
        String bid = "45345xclm34kxjL";

        log.info(tagService.listTags(bid));

    }
}

四、小结

至此,我们就实现了不启动SpringBoot项目就可以运行单元测试啦,下一篇《搭建大型分布式服务(四十七)Junit5如何在所有测试用例前执行初始化方法?》

加我加群一起交流学习!更多干货下载、项目源码和大厂内推等着你文章来源地址https://www.toymoban.com/news/detail-741977.html

springboot单元测试不启动整个项目,分布式,java,spring boot,单元测试,java springboot单元测试不启动整个项目,分布式,java,spring boot,单元测试,java springboot单元测试不启动整个项目,分布式,java,spring boot,单元测试,java

到了这里,关于搭建大型分布式服务(四十六)利用mockito不启动SpringBoot项目下进行单元测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 搭建Zookeeper集群:三台服务器,一场分布式之舞

    欢迎来到我的博客,代码的世界里,每一行都是一个故事 在分布式系统的舞台上,Zookeeper是一位不可或缺的重要角色。如何搭建一个稳定、高性能的Zookeeper集群,成为每位系统管理员和开发者的必修课。让我们一同踏上这场集群之旅,揭秘三台服务器背后的Zookeeper配置细节,

    2024年04月28日
    浏览(51)
  • 十六、Spring Cloud Sleuth 分布式请求链路追踪

    1、为什么出出现这个技术?需要解决哪些问题 2、是什么? 官网: https://github.com/spring-cloud/spring-cloud-sleuth spring-cloud-sleuth 提供了一套完整的分布式链路追踪的解决方案 ,并且兼容支持了 zipkin (展现) 3、解决 1、下载运行zipkin 下载jar包到本地 https://repo1.maven.org/maven2/io/zipkin/

    2024年02月12日
    浏览(45)
  • 面试题:在大型分布式系统中,给你一条 SQL,让你优化,你会怎么做?

    亲爱的小伙伴们,大家好呀!我是小米,一个热爱技术、乐于分享的90后程序猿。今天,我要和大家聊聊一个在大型分布式系统中非常有趣和挑战性的话题——如何优化 SQL 查询! 这个问题可不简单,但不要担心,我会一步步为大家详细解析。废话不多说,让我们开始吧! 在

    2024年02月07日
    浏览(63)
  • 微服务SpringBoot+Neo4j搭建企业级分布式应用拓扑图

    上一篇文章中我们介绍了 《【云原生专题】基于Docker+Neo4j图数据库搭建企业级分布式应用拓扑图》,但是只介绍了使用Cypher语言在Neo4j的浏览器中执行增删查改的操作,现在我们想要基于SpringBoot来实现代码层面的增删查改。 最便捷的方式就是访问 start.spring.io ,新建一个项目

    2024年02月02日
    浏览(50)
  • 毕业设计——基于SSM架构实现的大型分布式购物网站-B2C项目

    毕业设计——基于[SSM架构]实现的大型分布式购物网站-B2C项目 大型[分布式]购物网站-B2C项目 完整项目地址:https://download.csdn.net/download/lijunhcn/88430551 电商行业模式 B2B:企业到企业、商家到商家。例如阿里巴巴。 B2C:商家到客户。例如京东、淘宝商城 C2C:客户到客户。闲鱼。

    2024年02月04日
    浏览(69)
  • SpringCloud系列(十六)[分布式搜索引擎篇] - DSL 查询及相关性算分的学习 (部分)

    在SpringCloud系列(十五)[分布式搜索引擎篇] - 结合实际应用场景学习并使用 RestClient 客户端 API这篇文章中我们已经对 RestClient 有了初步的了解, 并且已经将一些数据进行了存储, 但是这并不是我们学习 ElasticSearch 的目的, ElasticSearch 最擅长的还是对数据的搜索及分析, 因此本篇

    2024年02月17日
    浏览(45)
  • 分布式消息队列RabbitMQ-Linux下服务搭建,面试完腾讯我才发现这些知识点竟然没掌握全

    vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app 5.修改配置文件 这里面修改{loopback_users, [“guest”]}改为{loopback_users, []} {application, rabbit, %% - - erlang - - [{description, “RabbitMQ”}, {id, “RabbitMQ”}, {vsn, “3.6.5”}, {modules, [‘background_gc’,‘delegate’,‘delegate_sup’,‘dtree’,‘file_han

    2024年04月14日
    浏览(53)
  • 利用 docker 实现JMeter分布式压测

    在工作中经常需要对一些关键接口做高QPS的压测,JMeter是由Java 语言开发,没创建一个线程(虚拟用户),JVM默认会为每个线程分配1M的堆栈内存空间。受限于单台试压机的配置很难实现太高的并发。所以,通过JMeter实现分布式,可以整合多台主机的硬件资源,实现同时对被测

    2024年02月05日
    浏览(48)
  • ZooKeeper之分布式环境搭建--仲裁模式与伪分布式环境搭建

    相关知识 为了完成本关任务,你需要掌握:1.ZooKeeper单节点安装方法,2.命令行基本操作。 ZooKeeper之仲裁模式 standlone 模式运行ZooKeeper,便于评估,开发,测试和学习。但是在实际生产中,使用ZooKeeper均以仲裁模式( quorum mode )运行, quorum mode 具有一组ZooKeeper服务器,这一组

    2024年02月05日
    浏览(48)
  • 利用Java代码调用Lua脚本改造分布式锁

    4.8 利用Java代码调用Lua脚本改造分布式锁 lua脚本本身并不需要大家花费太多时间去研究,只需要知道如何调用,大致是什么意思即可,所以在笔记中并不会详细的去解释这些lua表达式的含义。 我们的RedisTemplate中,可以利用execute方法去执行lua脚本,参数对应关系就如下图股

    2024年04月10日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包