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

mock方法内容的匿名方法

业务方法

@Override
public void deleteResourceCodesFromResourceFile(List<ResourceDO> resources) {redissonLock.lock(new LockCallback<IResultEnum>() {@Overridepublic String getLockName() {return CacheKey.REFRESH_DOMAIN_JSON_STATUS_LOCK_KEY;}@Overridepublic IResultEnum process() {// 方法逻辑....return DefaultResultEnum.SUCCESS;}}, 20, TimeUnit.SECONDS);}

要mock对象redissonLock,但是里面的process方法还是要真实执行,代码如下

/*** @author A2001111* @date 2024/9/30 13:17*/
package com.haier.configure.service.impl;import com.haier.configure.entity.ResourceDO;
import com.haier.configure.mapper.ResourceMapper;
import com.haier.configure.service.LanguageService;
import com.haier.configure.service.OssService;
import com.haier.uo.framework.redisson.lock.LockCallback;
import com.haier.uo.framework.redisson.lock.RedissonLock;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.*;
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collector;import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.*;@MockitoSettings(strictness = Strictness.LENIENT)
class ResourceServiceImplTest<M extends ResourceMapper> {@Mock(answer = Answers.RETURNS_DEEP_STUBS)private LanguageService languageService;@Mock(answer = Answers.RETURNS_DEEP_STUBS)private OssService ossService;@Mock(answer = Answers.RETURNS_DEEP_STUBS)private RedissonLock redissonLock;@InjectMocks@Spyprivate ResourceServiceImpl resourceServiceImpl;@Mockprivate M baseMapper;private AutoCloseable mockitoCloseable;@BeforeEachvoid setUp() throws Exception {mockitoCloseable = MockitoAnnotations.openMocks(this);}@AfterEachvoid tearDown() throws Exception {mockitoCloseable.close();}@Testvoid test_deleteResourceCodesFromResourceFile_should_void_when_condition() throws Exception {// 只有特定参数才返回truewhen(ossService.existFileName("commonDefaultCode_HW_zh-CN.json")).thenAnswer(invocationOnMock->{String filename = invocationOnMock.getArgument(0);return filename.equals("commonDefaultCode_HW_zh-CN.json");});when(ossService.getResourceFileContent(anyString())).thenReturn("[{\"code\":\"ML_HW_quit-app\",\"text\":\"退出程序\"},{\"code\":\"ML_HW_edit\",\"text\":\"编辑\"},{\"code\":\"ML_HW_about\",\"text\":\"关于\"}]");when(ossService.uploadFile(anyString(), anyString())).thenReturn("xxxx");// mock方法里面的匿名方法!!!!!!// mock方法里面的匿名方法!!!!!!// mock方法里面的匿名方法!!!!!!when(redissonLock.lock(any(LockCallback.class), anyLong(), any())).thenAnswer(invocation -> {LockCallback callback = invocation.getArgument(0);return callback.process();});List<String> languageCodes = new ArrayList<>();languageCodes.add("zh-CN");when(languageService.getEnableList().stream().map(any(Function.class)).collect(any(Collector.class))).thenReturn(languageCodes);List<ResourceDO> resources = new ArrayList<>();ResourceDO resourceDO = new ResourceDO();resourceDO.setDomainCode("commonDefaultCode");resourceDO.setModuleCode("HW");resourceDO.setCode("ML_HW_quit-app");resourceDO.setResourceType(0);resources.add(resourceDO);// run the testresourceServiceImpl.deleteResourceCodesFromResourceFile(resources);}}

相关文章:

  • 关于HTML 案例_个人简历展示02
  • 动手学深度学习(李沐)PyTorch 第 3 章 线性神经网络
  • Jmeter的使用方法
  • python中提示‘pyinstaller‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  • vue3:路由守卫(全局守卫、路由独享守卫、组件内守卫)
  • 15、网络安全合规由来与要素
  • 应用性能管理工具-SkyWalking
  • 目前最好用的爬虫软件是那个?
  • C++游戏
  • 追梦无Bug的软件世界
  • Web3.0 应用项目
  • Conda虚拟环境配置常见问题记录
  • 微服务sentinel解析部署使用全流程
  • 《RabbitMQ篇》Centos7安装RabbitMQ
  • window java17改成java 8
  • C++11: atomic 头文件
  • docker python 配置
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • MD5加密原理解析及OC版原理实现
  • Tornado学习笔记(1)
  • Vue实战(四)登录/注册页的实现
  • 从0实现一个tiny react(三)生命周期
  • 解析 Webpack中import、require、按需加载的执行过程
  • 前端攻城师
  • 深入浅出webpack学习(1)--核心概念
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 我感觉这是史上最牛的防sql注入方法类
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 字符串匹配基础上
  • ionic入门之数据绑定显示-1
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (c语言+数据结构链表)项目:贪吃蛇
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (八)Flink Join 连接
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)德国人的记事本
  • (转)平衡树
  • (自用)gtest单元测试
  • *p++,*(p++),*++p,(*p)++区别?
  • .dwp和.webpart的区别
  • .net MySql
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • /usr/bin/env: node: No such file or directory
  • @AliasFor注解
  • @SuppressWarnings(unchecked)代码的作用