Mockito无法Mock RedisTemplate解决方案

这篇具有很好参考价值的文章主要介绍了Mockito无法Mock RedisTemplate解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Mockito无法Mock RedisTemplate解决方案

如题,在SpringBoot工程中使用@MockBean对RedisTemplate进行Mock时发现报错,RedisTemplate连接工厂为null

当尝试将RedisConnectFaction注入测试类进行Mock后发现依然无效。

所以尝试新的解决方案:

将RedisTemplate使用@Spy注入原始类,在测试运行前对RedisTemplate底层方法进行批量Mock

public class RedisTemplateMockUtil {
    /**
     * Resolve:RedisTemplate cannot use @ MockBean for Mock
     * @param redisTemplate spy redis template
     * @param key bound key
     */
    public static void mockRedisTemplate(RedisTemplate<String,Object> redisTemplate,String key){
        ValueOperations valueOperations = Mockito.mock(ValueOperations.class);
        SetOperations setOperations = Mockito.mock(SetOperations.class);
        HashOperations hashOperations = Mockito.mock(HashOperations.class);
        ListOperations listOperations = Mockito.mock(ListOperations.class);
        ZSetOperations zSetOperations = Mockito.mock(ZSetOperations.class);
        when(redisTemplate.opsForSet()).thenReturn(setOperations);
        when(redisTemplate.opsForValue()).thenReturn(valueOperations);
        when(redisTemplate.opsForHash()).thenReturn(hashOperations);
        when(redisTemplate.opsForList()).thenReturn(listOperations);
        when(redisTemplate.opsForZSet()).thenReturn(zSetOperations);

        BoundListOperations boundListOperations = Mockito.mock(BoundListOperations.class);
        when(redisTemplate.boundListOps(key)).thenReturn(boundListOperations);
        BoundValueOperations boundValueOperations = Mockito.mock(BoundValueOperations.class);
        when(redisTemplate.boundValueOps(key)).thenReturn(boundValueOperations);
        BoundHashOperations boundHashOperations = Mockito.mock(BoundHashOperations.class);
        when(redisTemplate.boundHashOps(key)).thenReturn(boundHashOperations);
        BoundSetOperations boundSetOperations = Mockito.mock(BoundSetOperations.class);
        when(redisTemplate.boundSetOps(key)).thenReturn(boundSetOperations);

        RedisOperations redisOperations = Mockito.mock(RedisOperations.class);
        RedisConnection redisConnection = Mockito.mock(RedisConnection.class);
        RedisConnectionFactory redisConnectionFactory = Mockito.mock(RedisConnectionFactory.class);
        when(redisTemplate.getConnectionFactory()).thenReturn(redisConnectionFactory);
        when(valueOperations.getOperations()).thenReturn(redisOperations);
        when(redisTemplate.getConnectionFactory().getConnection()).thenReturn(redisConnection);
    }
}

经过测试后成功对RedisTemplate进行Mock文章来源地址https://www.toymoban.com/news/detail-519733.html

@BeforeEach()
public void redisTemplateMock(){
	this.redisTemplate = RedisTemplateMockUtil.mockRedisTemplate(redisTemplate,"BOUND_KEY");
}

到了这里,关于Mockito无法Mock RedisTemplate解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • IDEA无法连接虚拟机中的Redis的解决方案,无法连接Jedis,无法ping通虚拟机的解决方案

    首先,笔者先说明一下自身的情况,怎么连接都连不上,网上的教程全部都看了一遍,基本上没用得上的,这篇文章里面的解决方案包括了笔者能在网上找到了最全面的办法总结,最后终于是连上了 目录 一.连接Jedis出错 二.解决方案 1.确保虚拟网卡的存在 2.主机和虚拟机之间

    2024年04月08日
    浏览(49)
  • 无法访问Github解决方案

    1、找到hosts 文件 hosts 文件在每个系统的位置不一,详情如下: Windows 系统:C:WindowsSystem32driversetchosts Linux 系统:/etc/hosts Mac(苹果电脑)系统:/etc/hosts Android(安卓)系统:/system/etc/hosts iPhone(iOS)系统:/etc/hosts 2、打开hosts文件 Windows 使用记事本。 Linux、Mac 使用 Root 权

    2024年02月01日
    浏览(75)
  • Hive无法启动的解决方案

    关掉虚拟机后,重新启动后,按照Hadoop和Hive的流程重新启动,发现无法启动成功,特别是元数据服务无法启动,出现以下错误: Exception in thread “main” java.lang.RuntimeException: java.net.ConnectException: Call From hadoop-master/192.168.19.137 to hadoop-master:9000 failed on connection exception: java.net.Conn

    2024年02月12日
    浏览(37)
  • 外部无法访问ES的解决方案

    外部无法访问ES的解决方案: 打开Elasticsearch安装路径下config目录下的elasticsearch.yml文件,加入如下配置: discovery.seed_hosts: [\\\"host1\\\"] network.host: 0.0.0.0   重新启动ES即可。 PS:如果修改配置文件后,启动报错 max file descriptors [4096] for elasticsearch process is too low, increase to at least [6553

    2024年02月12日
    浏览(53)
  • foreach无法修改数组值解决方案

    效果展示: 解决办法: 这里小编解释下,将 this 赋值给 that 通常是为了在回调函数或者异步代码中保持对Vue实例的访问 如若有帮助,可以给小编点个赞!!这是对小编最大的支持~

    2024年04月13日
    浏览(32)
  • Microsoft ToDo无法同步的解决方案

    问题:在开DAILI的情况下,Microsoft to-do、邮件、日历等UWP均无法正常同步。 此文中解释了原因 link UWP 是微软在 Windows 10 中引入的新概念,由于所有 UWP 应用均运行在被称为 App Container 的虚拟沙箱环境中,其安全性及纯净度远胜于传统的 EXE 应用。但 App Container 机制同时也阻止

    2024年02月05日
    浏览(48)
  • vscode中无法使用git解决方案

    1 首先查看git安装目录 where git    2 找到bash.exe 的路径 比如:C:/Users/Wangzd/AppData/Local/Programs/Git/bin/bash 3 找到vscode的配置项setting.json 4 添加   \\\"terminal.integrated.shell.windowns\\\": \\\"C:/Users/Wangzd/AppData/Local/Programs/Git/bin/bash\\\"

    2024年02月14日
    浏览(59)
  • 记单元测试的时候Mockito RedisTemplate的时候 报setIfAbsent null

    mock方法这样写 RedisTemplateString, Object redisTemplate = mock(RedisTemplate.class); when(mockRedisUtils.getRedisTemplate()).thenReturn(redisTemplate); ValueOperationsString, Object valueOperations = mock(ValueOperations.class); when(redisTemplate.opsForValue()).thenReturn(valueOperations); when(valueOperations.setIfAbsent(any(String.class), any(String

    2024年02月12日
    浏览(39)
  • ArcGIS Server无法启动及服务无法访问的案例和解决方案

    问题描述         在服务器读取磁盘异常的情况下,发布了一个新服务,此时出现服务无法访问的情况。         重启Server服务后,发现Server无法启动,重启服务器机器后无法解决此问题,依旧无法启动,且Server日志文件里出现以下信息。  问题原因及解决方案    

    2024年02月08日
    浏览(71)
  • 关于Microsoft Store无法更新的解决方案

    20230324 By wdhuag 最近莫名其妙的,Microsoft Store更新一直报错,能正常进入。网上搜到的DNS、hosts、重置商店、Internet 选项基本没有效果。 Microsoft store无法安装以及更新应用,怎么解决? - 简书 能进入windows store 却不能下载软件? - 知乎 win10应用商店无法下载应用的问题 0x80D02

    2024年02月11日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包