Gateway
controller
controller层mock service接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| @Slf4j class BucketControllerTest extends BaseTest {
@Resource private BucketController bucketController; @Resource private CommonService commonService;
@BeforeEach void setUp() { MockitoAnnotations.openMocks(this); }
@Test void uploadFile() { BucketService bucketService = mock(BucketService.class); ReflectionTestUtils.setField(commonService, "bucketService", bucketService); doNothing().when(bucketService).putObject(any(), any(), any(), any(), any());
try { String s = bucketController.uploadFile(getMultipartFileTest()); assertNotNull(s); } catch (IOException e) { log.info(JSON.toJSONString(Arrays.asList(e.getStackTrace()))); } }
@Test void uploadPre() { BucketService mock = mock(BucketService.class); doNothing().when(mock).putObject(any(), any(), any(), any(), any()); ReflectionTestUtils.setField(bucketController, "bucketService", mock);
String s = bucketController.uploadPre(getMultipartFileTest()); assertNotNull(s); }
private MultipartFile getMultipartFileTest() { String rootPath = Objects.requireNonNull(BucketController.class.getClassLoader().getResource("")).getPath(); String filePath = rootPath + "/sheet.xlsx"; BufferedInputStream inputStream = FileUtil.getInputStream(filePath); MockMultipartFile mockMultipartFile = null; try { mockMultipartFile = new MockMultipartFile("sheet.xlsx", inputStream); } catch (IOException e) { log.info(JSON.toJSONString(Arrays.asList(e.getStackTrace()))); } return mockMultipartFile; }
}
|
rpcImpl
rpc的实现类mock掉依赖的service
mock static
mock掉依赖三方rpc的静态方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class AuthCallBackRpcServiceImplTest extends BaseTest {
@Resource private AuthCallBackRpcService authCallBackRpcService;
@Test void authCallBackAsyncOfFaDaDa() { try (MockedStatic<RpcHttpUtil> rpcHttpUtilMockedStatic = mockStatic(RpcHttpUtil.class)) { when(RpcHttpUtil.getBodyString(any())).thenReturn(TestDOGenerateUtil.getRpcHttpRequestStr()); when(RpcHttpUtil.getMap(any())).thenReturn(TestDOGenerateUtil.getAuthCallBackForFadadaMap()); RpcHttpResponse rpcHttpResponse = authCallBackRpcService.authCallBackAsyncOfFaDaDa(TestDOGenerateUtil.getRpcHttpRequest()); rpcHttpUtilMockedStatic.verify(() -> RpcHttpUtil.getBodyString(any())); rpcHttpUtilMockedStatic.verify(() -> RpcHttpUtil.getMap(any())); assertNotNull(rpcHttpResponse); } } }
|
Service
Mock httpClient
mock http请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class FadadaServiceImplTest extends BaseTest {
@Resource private FadadaService fadadaService; @MockBean private UploadTemplateClient uploadTemplateClient;
@Test void uploadTemplate() { when(uploadTemplateClient.invoke(any(),any())).thenReturn(TestDOGenerateUtil.getFddReturnInApplyCert()); boolean http = fadadaService.uploadTemplate("1", "http"); assertTrue(http); } }
|
Mock Dao
mock Dao层接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| class AgentAgreementServiceImplTest extends BaseTest {
@Resource private AgentAgreementService agentAgreementService; @MockBean(name = "baseMapper") private AgentAgreementMapper baseMapper; @MockBean private AgentAgreementMapper agentAgreementMapper;
@Test void create() { Mockito.when(baseMapper.selectOne(Mockito.any())).thenReturn(TestDOGenerateUtil.getAgentAgreementDO()); boolean b = agentAgreementService.create(TestDOGenerateUtil.getAgentCreateParam(), TestDOGenerateUtil.getAgentId(), TestDOGenerateUtil.getAgreementId()); Assertions.assertTrue(b);
Mockito.when(baseMapper.selectOne(Mockito.any())).thenReturn(null); Mockito.when(baseMapper.insert(Mockito.any())).thenReturn(1); boolean b1 = agentAgreementService.create(TestDOGenerateUtil.getAgentCreateParam(), TestDOGenerateUtil.getAgentId(), TestDOGenerateUtil.getAgreementId()); Assertions.assertTrue(b1); }
@Test void getByAgentIds() { Mockito.when(agentAgreementMapper.selectList(Mockito.any())).thenReturn(Collections.singletonList(TestDOGenerateUtil.getAgentAgreementDO())); List<AgentAgreementDO> agentAgreementDOS = agentAgreementService.getByAgentIds(Collections.singletonList(TestDOGenerateUtil.getAgentId())); Assertions.assertTrue(CollUtil.isNotEmpty(agentAgreementDOS)); }
@Test void update() { Mockito.when(baseMapper.update(Mockito.any(),Mockito.any(Wrapper.class))).thenReturn(1); boolean update = agentAgreementService.update(TestDOGenerateUtil.getAgentEditParam()); Assertions.assertTrue(update); }
@Test void batchSaveAgentAgreement() { Mockito.when(agentAgreementMapper.saveBatch(Mockito.any())).thenReturn(true); Boolean aBoolean = agentAgreementService.batchSaveAgentAgreement(Collections.singletonList(TestDOGenerateUtil.getAgentAgreementDO())); Assertions.assertTrue(aBoolean);
Boolean bBoolean = agentAgreementService.batchSaveAgentAgreement(null); Assertions.assertFalse(bBoolean); } }
|
Mock Rpc
mock 依赖的rpc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| @Slf4j class CommonServiceImplTest extends BaseTest {
@Resource private CommonService commonService; @MockBean private BucketService bucketService;
private final static String FILE_NAME = "sheet.xlsx";
@Test void fmsUploadFile() { doNothing().when(bucketService).putObject(any(), any(), any(), any(), any()); String s = commonService.fmsUploadFile(getInputStreamTest(), FILE_NAME); Assertions.assertNotNull(s); }
@Test void fmsUploadFileByURI() { doNothing().when(bucketService).putObject(any(), any(), any(), any(), any()); String s = commonService.fmsUploadFileByURI(getFilePathTest(), FILE_NAME); Assertions.assertNotNull(s); }
private InputStream getInputStreamTest() { return FileUtil.getInputStream(getFilePathTest()); }
private String getFilePathTest() { String rootPath = Objects.requireNonNull(BucketController.class.getClassLoader().getResource("")).getPath(); return rootPath + "/" + FILE_NAME; } }
|
Dao层单测
使用h2内存数据库, 测试sql可行性(需要排除启动类加载的正常MysqlConfiguration), 如@ComponentScan(value = "com.jkys.hs.*",excludeFilters = {@ComponentScan.Filter(type= FilterType.REGEX,pattern = "com\\.jkys\\.hs\\.config\\.app\\.DataSourceConfig")} )
使用bean扫描中的excludeFilters属性排除不需要的bean
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| class AgentContractMapperTest extends BaseTest {
@Resource private AgentContractMapper agentContractMapper;
@Test void insertList() { AgentContractDO agentContractDO = TestDOGenerateUtil.getAgentContractDO(); agentContractDO.setId(null); List<AgentContractDO> agentContractDOS = Arrays.asList(agentContractDO); Integer integer = agentContractMapper.insertList(agentContractDOS); Assertions.assertEquals(1, integer); }
@Test void selectByAgentAndStatusWithoutDeleted() { List<AgentContractDO> agentContractDOS = agentContractMapper.selectByAgentAndStatusWithoutDeleted(TestDOGenerateUtil.getAgentId(), 0); Assertions.assertNotNull(agentContractDOS); }
@Test void selectNotEndByAgent() { List<AgentContractDO> agentContractDOS = agentContractMapper.selectNotEndByAgent(TestDOGenerateUtil.getAgentId(), new Date()); Assertions.assertNotNull(agentContractDOS); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;DATABASE_TO_UPPER=FALSE;MODE=MYSQL spring.datasource.username=sa spring.datasource.password= # 建表语句 spring.datasource.schema=classpath:h2/schema.sql # 需要初始化的insert语句 spring.datasource.data=classpath:h2/data.sql spring.datasource.continue-on-error=true spring.h2.console.enabled=true spring.h2.console.path=/h2 spring.h2.console.settings.web-allow-others=true spring.h2.console.settings.trace=true
|
Anything can go right will go right