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);}}