Commit 7bb2dd11677af52cdde7ba4a9a5b36b0ce5e5b9b

Authored by YunaiV
1 parent 2f0d7e8a

引入 redis mock 服务器

Showing 16 changed files with 101 additions and 46 deletions
@@ -183,6 +183,13 @@ @@ -183,6 +183,13 @@
183 <scope>test</scope> 183 <scope>test</scope>
184 </dependency> 184 </dependency>
185 185
  186 + <dependency>
  187 + <groupId>com.github.fppt</groupId> <!-- 单元测试,我们采用内嵌的 Redis 数据库 -->
  188 + <artifactId>jedis-mock</artifactId>
  189 + <version>0.1.16</version>
  190 + <scope>test</scope>
  191 + </dependency>
  192 +
186 <!-- 工具类相关 --> 193 <!-- 工具类相关 -->
187 <dependency> 194 <dependency>
188 <groupId>org.projectlombok</groupId> 195 <groupId>org.projectlombok</groupId>
src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/InfConfigController.java
@@ -13,7 +13,6 @@ import cn.iocoder.dashboard.modules.infra.service.config.InfConfigService; @@ -13,7 +13,6 @@ import cn.iocoder.dashboard.modules.infra.service.config.InfConfigService;
13 import io.swagger.annotations.Api; 13 import io.swagger.annotations.Api;
14 import io.swagger.annotations.ApiImplicitParam; 14 import io.swagger.annotations.ApiImplicitParam;
15 import io.swagger.annotations.ApiOperation; 15 import io.swagger.annotations.ApiOperation;
16 -import org.springframework.beans.factory.annotation.Value;  
17 import org.springframework.validation.annotation.Validated; 16 import org.springframework.validation.annotation.Validated;
18 import org.springframework.web.bind.annotation.*; 17 import org.springframework.web.bind.annotation.*;
19 18
@@ -30,19 +29,6 @@ import static cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants.CON @@ -30,19 +29,6 @@ import static cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants.CON
30 @RequestMapping("/infra/config") 29 @RequestMapping("/infra/config")
31 public class InfConfigController { 30 public class InfConfigController {
32 31
33 - @Value("${demo.test}")  
34 - private String demo;  
35 -  
36 - @GetMapping("/demo")  
37 - public String demo() {  
38 - return demo;  
39 - }  
40 -  
41 - @PostMapping("/demo")  
42 - public void setDemo() {  
43 -  
44 - }  
45 -  
46 @Resource 32 @Resource
47 private InfConfigService configService; 33 private InfConfigService configService;
48 34
src/main/java/cn/iocoder/dashboard/modules/tool/dal/mysql/coegen/ToolCodegenColumnMapper.java renamed to src/main/java/cn/iocoder/dashboard/modules/tool/dal/mysql/codegen/ToolCodegenColumnMapper.java
1 -package cn.iocoder.dashboard.modules.tool.dal.mysql.coegen; 1 +package cn.iocoder.dashboard.modules.tool.dal.mysql.codegen;
2 2
3 import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX; 3 import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX;
4 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenColumnDO; 4 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenColumnDO;
src/main/java/cn/iocoder/dashboard/modules/tool/dal/mysql/coegen/ToolCodegenTableMapper.java renamed to src/main/java/cn/iocoder/dashboard/modules/tool/dal/mysql/codegen/ToolCodegenTableMapper.java
1 -package cn.iocoder.dashboard.modules.tool.dal.mysql.coegen; 1 +package cn.iocoder.dashboard.modules.tool.dal.mysql.codegen;
2 2
3 import cn.iocoder.dashboard.common.pojo.PageResult; 3 import cn.iocoder.dashboard.common.pojo.PageResult;
4 import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX; 4 import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX;
src/main/java/cn/iocoder/dashboard/modules/tool/dal/mysql/coegen/ToolSchemaColumnMapper.java renamed to src/main/java/cn/iocoder/dashboard/modules/tool/dal/mysql/codegen/ToolSchemaColumnMapper.java
1 -package cn.iocoder.dashboard.modules.tool.dal.mysql.coegen; 1 +package cn.iocoder.dashboard.modules.tool.dal.mysql.codegen;
2 2
3 import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX; 3 import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX;
4 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaColumnDO; 4 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaColumnDO;
src/main/java/cn/iocoder/dashboard/modules/tool/dal/mysql/coegen/ToolSchemaTableMapper.java renamed to src/main/java/cn/iocoder/dashboard/modules/tool/dal/mysql/codegen/ToolSchemaTableMapper.java
1 -package cn.iocoder.dashboard.modules.tool.dal.mysql.coegen; 1 +package cn.iocoder.dashboard.modules.tool.dal.mysql.codegen;
2 2
3 import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX; 3 import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX;
4 import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX; 4 import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX;
src/main/java/cn/iocoder/dashboard/modules/tool/service/codegen/impl/ToolCodegenServiceImpl.java
@@ -10,10 +10,10 @@ import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenColum @@ -10,10 +10,10 @@ import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenColum
10 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenTableDO; 10 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenTableDO;
11 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaColumnDO; 11 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaColumnDO;
12 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaTableDO; 12 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaTableDO;
13 -import cn.iocoder.dashboard.modules.tool.dal.mysql.coegen.ToolCodegenColumnMapper;  
14 -import cn.iocoder.dashboard.modules.tool.dal.mysql.coegen.ToolCodegenTableMapper;  
15 -import cn.iocoder.dashboard.modules.tool.dal.mysql.coegen.ToolSchemaColumnMapper;  
16 -import cn.iocoder.dashboard.modules.tool.dal.mysql.coegen.ToolSchemaTableMapper; 13 +import cn.iocoder.dashboard.modules.tool.dal.mysql.codegen.ToolCodegenColumnMapper;
  14 +import cn.iocoder.dashboard.modules.tool.dal.mysql.codegen.ToolCodegenTableMapper;
  15 +import cn.iocoder.dashboard.modules.tool.dal.mysql.codegen.ToolSchemaColumnMapper;
  16 +import cn.iocoder.dashboard.modules.tool.dal.mysql.codegen.ToolSchemaTableMapper;
17 import cn.iocoder.dashboard.modules.tool.enums.codegen.ToolCodegenImportTypeEnum; 17 import cn.iocoder.dashboard.modules.tool.enums.codegen.ToolCodegenImportTypeEnum;
18 import cn.iocoder.dashboard.modules.tool.service.codegen.ToolCodegenService; 18 import cn.iocoder.dashboard.modules.tool.service.codegen.ToolCodegenService;
19 import cn.iocoder.dashboard.util.collection.CollectionUtils; 19 import cn.iocoder.dashboard.util.collection.CollectionUtils;
src/test/java/cn/iocoder/dashboard/BaseSpringBootUnitTest.java 0 → 100644
  1 +package cn.iocoder.dashboard;
  2 +
  3 +import org.junit.jupiter.api.AfterEach;
  4 +import org.springframework.boot.test.context.SpringBootTest;
  5 +import org.springframework.data.redis.core.RedisCallback;
  6 +import org.springframework.data.redis.core.StringRedisTemplate;
  7 +import org.springframework.test.context.ActiveProfiles;
  8 +import org.springframework.test.context.jdbc.Sql;
  9 +
  10 +import javax.annotation.Resource;
  11 +
  12 +@SpringBootTest
  13 +@ActiveProfiles("unit-test") // 设置使用 application-unit-test 配置文件
  14 +@Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // 每个单元测试结束后,清理 DB
  15 +public class BaseSpringBootUnitTest {
  16 +
  17 + @Resource
  18 + private StringRedisTemplate stringRedisTemplate;
  19 +
  20 + /**
  21 + * 每个单元测试结束后,清理 Redis
  22 + */
  23 + @AfterEach
  24 + public void cleanRedis() {
  25 + stringRedisTemplate.execute((RedisCallback<Object>) connection -> {
  26 + connection.flushDb();
  27 + return null;
  28 + });
  29 + }
  30 +
  31 +}
src/test/java/cn/iocoder/dashboard/config/QuartzTestConfiguration.java
1 package cn.iocoder.dashboard.config; 1 package cn.iocoder.dashboard.config;
2 2
  3 +import io.reactivex.rxjava3.core.Scheduler;
  4 +import org.mockito.Mockito;
  5 +import org.springframework.context.annotation.Bean;
3 import org.springframework.context.annotation.Configuration; 6 import org.springframework.context.annotation.Configuration;
  7 +import org.springframework.context.annotation.Lazy;
4 8
5 @Configuration 9 @Configuration
  10 +@Lazy(false)
6 public class QuartzTestConfiguration { 11 public class QuartzTestConfiguration {
7 12
8 - // TODO 芋艿:暂时不用 Scheduler  
9 -// @Bean  
10 -// public Scheduler scheduler() {  
11 -// return Mockito.mock(Scheduler.class);  
12 -// } 13 + @Bean
  14 + public Scheduler scheduler() {
  15 + return Mockito.mock(Scheduler.class);
  16 + }
13 17
14 } 18 }
src/test/java/cn/iocoder/dashboard/config/RedisTestConfiguration.java 0 → 100644
  1 +package cn.iocoder.dashboard.config;
  2 +
  3 +import com.github.fppt.jedismock.RedisServer;
  4 +import org.redisson.spring.starter.RedissonAutoConfiguration;
  5 +import org.springframework.boot.autoconfigure.AutoConfigureBefore;
  6 +import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
  7 +import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
  8 +import org.springframework.boot.context.properties.EnableConfigurationProperties;
  9 +import org.springframework.context.annotation.Bean;
  10 +import org.springframework.context.annotation.Configuration;
  11 +import org.springframework.context.annotation.Lazy;
  12 +
  13 +import java.io.IOException;
  14 +
  15 +@Configuration
  16 +@Lazy(false) // 禁用懒加载,因为需要保证 Redis Server 必须先启动
  17 +@EnableConfigurationProperties(RedisProperties.class)
  18 +@AutoConfigureBefore({RedisAutoConfiguration.class, RedissonAutoConfiguration.class}) // 在 Redis 自动配置前,进行初始化
  19 +public class RedisTestConfiguration {
  20 +
  21 + /**
  22 + * 创建模拟的 Redis Server 服务器
  23 + */
  24 + @Bean(initMethod = "start", destroyMethod = "stop")
  25 + public RedisServer redisServer(RedisProperties properties) throws IOException {
  26 + return new RedisServer(properties.getPort());
  27 + }
  28 +
  29 +}
src/test/java/cn/iocoder/dashboard/framework/quartz/core/scheduler/SchedulerManagerTest.java
1 package cn.iocoder.dashboard.framework.quartz.core.scheduler; 1 package cn.iocoder.dashboard.framework.quartz.core.scheduler;
2 2
3 import cn.hutool.core.util.StrUtil; 3 import cn.hutool.core.util.StrUtil;
  4 +import cn.iocoder.dashboard.BaseSpringBootUnitTest;
4 import cn.iocoder.dashboard.modules.system.job.auth.SysUserSessionTimeoutJob; 5 import cn.iocoder.dashboard.modules.system.job.auth.SysUserSessionTimeoutJob;
5 import org.junit.jupiter.api.Test; 6 import org.junit.jupiter.api.Test;
6 import org.quartz.SchedulerException; 7 import org.quartz.SchedulerException;
7 -import org.springframework.boot.test.context.SpringBootTest;  
8 8
9 import javax.annotation.Resource; 9 import javax.annotation.Resource;
10 10
11 -@SpringBootTest  
12 -class SchedulerManagerTest { 11 +class SchedulerManagerTest extends BaseSpringBootUnitTest {
13 12
14 @Resource 13 @Resource
15 private SchedulerManager schedulerManager; 14 private SchedulerManager schedulerManager;
src/test/java/cn/iocoder/dashboard/modules/infra/service/config/InfConfigServiceImplTest.java
1 package cn.iocoder.dashboard.modules.infra.service.config; 1 package cn.iocoder.dashboard.modules.infra.service.config;
2 2
  3 +import cn.iocoder.dashboard.BaseSpringBootUnitTest;
3 import cn.iocoder.dashboard.common.exception.ServiceException; 4 import cn.iocoder.dashboard.common.exception.ServiceException;
4 import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigCreateReqVO; 5 import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigCreateReqVO;
5 import cn.iocoder.dashboard.modules.infra.dal.dataobject.config.InfConfigDO; 6 import cn.iocoder.dashboard.modules.infra.dal.dataobject.config.InfConfigDO;
@@ -9,9 +10,7 @@ import cn.iocoder.dashboard.modules.infra.mq.producer.config.InfConfigProducer; @@ -9,9 +10,7 @@ import cn.iocoder.dashboard.modules.infra.mq.producer.config.InfConfigProducer;
9 import cn.iocoder.dashboard.modules.infra.service.config.impl.InfConfigServiceImpl; 10 import cn.iocoder.dashboard.modules.infra.service.config.impl.InfConfigServiceImpl;
10 import cn.iocoder.dashboard.util.AssertUtils; 11 import cn.iocoder.dashboard.util.AssertUtils;
11 import org.junit.jupiter.api.Test; 12 import org.junit.jupiter.api.Test;
12 -import org.springframework.boot.test.context.SpringBootTest;  
13 import org.springframework.boot.test.mock.mockito.MockBean; 13 import org.springframework.boot.test.mock.mockito.MockBean;
14 -import org.springframework.test.context.ActiveProfiles;  
15 import org.springframework.test.context.jdbc.Sql; 14 import org.springframework.test.context.jdbc.Sql;
16 15
17 import javax.annotation.Resource; 16 import javax.annotation.Resource;
@@ -21,10 +20,7 @@ import static org.junit.jupiter.api.Assertions.*; @@ -21,10 +20,7 @@ import static org.junit.jupiter.api.Assertions.*;
21 import static org.mockito.Mockito.times; 20 import static org.mockito.Mockito.times;
22 import static org.mockito.Mockito.verify; 21 import static org.mockito.Mockito.verify;
23 22
24 -@SpringBootTest  
25 -@ActiveProfiles("unit-test")  
26 -@Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)  
27 -public class InfConfigServiceImplTest { 23 +public class InfConfigServiceImplTest extends BaseSpringBootUnitTest {
28 24
29 @Resource 25 @Resource
30 private InfConfigServiceImpl configService; 26 private InfConfigServiceImpl configService;
src/test/java/cn/iocoder/dashboard/modules/tool/dal/mysql/coegen/ToolInformationSchemaColumnMapperTest.java renamed to src/test/java/cn/iocoder/dashboard/modules/tool/dal/mysql/codegen/ToolInformationSchemaColumnMapperTest.java
1 -package cn.iocoder.dashboard.modules.tool.dal.mysql.coegen; 1 +package cn.iocoder.dashboard.modules.tool.dal.mysql.codegen;
2 2
3 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaColumnDO; 3 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaColumnDO;
4 import org.junit.jupiter.api.Test; 4 import org.junit.jupiter.api.Test;
src/test/java/cn/iocoder/dashboard/modules/tool/dal/mysql/coegen/ToolInformationSchemaTableMapperTest.java renamed to src/test/java/cn/iocoder/dashboard/modules/tool/dal/mysql/codegen/ToolInformationSchemaTableMapperTest.java
1 -package cn.iocoder.dashboard.modules.tool.dal.mysql.coegen; 1 +package cn.iocoder.dashboard.modules.tool.dal.mysql.codegen;
2 2
3 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaTableDO; 3 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaTableDO;
4 import org.junit.jupiter.api.Test; 4 import org.junit.jupiter.api.Test;
src/test/java/cn/iocoder/dashboard/modules/tool/service/codegen/impl/ToolCodegenEngineTest.java
@@ -2,8 +2,8 @@ package cn.iocoder.dashboard.modules.tool.service.codegen.impl; @@ -2,8 +2,8 @@ package cn.iocoder.dashboard.modules.tool.service.codegen.impl;
2 2
3 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenColumnDO; 3 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenColumnDO;
4 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenTableDO; 4 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenTableDO;
5 -import cn.iocoder.dashboard.modules.tool.dal.mysql.coegen.ToolCodegenColumnMapper;  
6 -import cn.iocoder.dashboard.modules.tool.dal.mysql.coegen.ToolCodegenTableMapper; 5 +import cn.iocoder.dashboard.modules.tool.dal.mysql.codegen.ToolCodegenColumnMapper;
  6 +import cn.iocoder.dashboard.modules.tool.dal.mysql.codegen.ToolCodegenTableMapper;
7 import org.junit.jupiter.api.Test; 7 import org.junit.jupiter.api.Test;
8 import org.springframework.boot.test.context.SpringBootTest; 8 import org.springframework.boot.test.context.SpringBootTest;
9 9
src/test/resources/application-unit-test.yaml
1 spring: 1 spring:
2 main: 2 main:
3 - lazy-initialization: true 3 + lazy-initialization: true # 开启懒加载,加快速度
  4 + banner-mode: off # 单元测试,禁用 Banner
4 5
5 # 去除的自动配置项 6 # 去除的自动配置项
6 autoconfigure: 7 autoconfigure:
@@ -10,6 +11,11 @@ spring: @@ -10,6 +11,11 @@ spring:
10 - org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration # 单元测试,禁用 Quartz 11 - org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration # 单元测试,禁用 Quartz
11 - com.baomidou.lock.spring.boot.autoconfigure.LockAutoConfiguration # 单元测试,禁用 Lock4j 分布式锁 12 - com.baomidou.lock.spring.boot.autoconfigure.LockAutoConfiguration # 单元测试,禁用 Lock4j 分布式锁
12 13
  14 +# Swagger 接口文档的自动配置(单元测试,禁用 Swagger)
  15 +springfox:
  16 + documentation:
  17 + auto-startup: false
  18 +
13 --- #################### 数据库相关配置 #################### 19 --- #################### 数据库相关配置 ####################
14 20
15 spring: 21 spring:
@@ -25,7 +31,7 @@ spring: @@ -25,7 +31,7 @@ spring:
25 # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 31 # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
26 redis: 32 redis:
27 host: 127.0.0.1 # 地址 33 host: 127.0.0.1 # 地址
28 - port: 6379 # 端口 34 + port: 36379 # 端口(单元测试,使用 363979 端口)
29 database: 0 # 数据库索引 35 database: 0 # 数据库索引
30 36
31 --- #################### 定时任务相关配置 #################### 37 --- #################### 定时任务相关配置 ####################
@@ -70,10 +76,7 @@ spring: @@ -70,10 +76,7 @@ spring:
70 # Spring Boot Admin Server 服务端的相关配置 76 # Spring Boot Admin Server 服务端的相关配置
71 context-path: /admin # 配置 Spring 77 context-path: /admin # 配置 Spring
72 78
73 -# 日志文件配置  
74 -logging:  
75 - file:  
76 - path: ${user.home}/logs/ # 日志文件的路径 79 +# 日志文件配置(不需要配置)
77 80
78 --- #################### 芋道相关配置 #################### 81 --- #################### 芋道相关配置 ####################
79 82