多模块重构 13:迁移集成测试~

This commit is contained in:
YunaiV 2022-02-04 12:28:48 +08:00
parent eb2ab3cc4d
commit 61672e0180
21 changed files with 287 additions and 119 deletions

View File

@ -35,6 +35,8 @@
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -1,52 +1,52 @@
package cn.iocoder.yudao.server.framework.quartz.core;
package cn.iocoder.yudao.module.system.job;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.server.BaseDbUnitTest;
import cn.iocoder.yudao.module.system.job.auth.SysUserSessionTimeoutJob;
import cn.iocoder.yudao.framework.quartz.core.scheduler.SchedulerManager;
import cn.iocoder.yudao.module.system.job.auth.UserSessionTimeoutJob;
import cn.iocoder.yudao.module.system.test.BaseDbUnitTest;
import org.junit.jupiter.api.Test;
import org.quartz.SchedulerException;
import javax.annotation.Resource;
class SchedulerManagerTest extends BaseDbUnitTest {
public class SchedulerManagerTest extends BaseDbUnitTest {
@Resource
private SchedulerManager schedulerManager;
@Test
public void testAddJob() throws SchedulerException {
String jobHandlerName = StrUtil.lowerFirst(SysUserSessionTimeoutJob.class.getSimpleName());
String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName());
schedulerManager.addJob(1L, jobHandlerName, "test", "0/10 * * * * ? *", 0, 0);
}
@Test
public void testUpdateJob() throws SchedulerException {
String jobHandlerName = StrUtil.lowerFirst(SysUserSessionTimeoutJob.class.getSimpleName());
String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName());
schedulerManager.updateJob(jobHandlerName, "hahaha", "0/20 * * * * ? *", 0, 0);
}
@Test
public void testDeleteJob() throws SchedulerException {
String jobHandlerName = StrUtil.lowerFirst(SysUserSessionTimeoutJob.class.getSimpleName());
String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName());
schedulerManager.deleteJob(jobHandlerName);
}
@Test
public void testPauseJob() throws SchedulerException {
String jobHandlerName = StrUtil.lowerFirst(SysUserSessionTimeoutJob.class.getSimpleName());
String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName());
schedulerManager.pauseJob(jobHandlerName);
}
@Test
public void testResumeJob() throws SchedulerException {
String jobHandlerName = StrUtil.lowerFirst(SysUserSessionTimeoutJob.class.getSimpleName());
String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName());
schedulerManager.resumeJob(jobHandlerName);
}
@Test
public void testTriggerJob() throws SchedulerException {
String jobHandlerName = StrUtil.lowerFirst(SysUserSessionTimeoutJob.class.getSimpleName());
String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName());
schedulerManager.triggerJob(1L, jobHandlerName, "niubi!!!");
}

View File

@ -1,24 +1,23 @@
package cn.iocoder.yudao.server.framework.redis.core.stream;
package cn.iocoder.yudao.module.system.mq;
import cn.hutool.core.thread.ThreadUtil;
import cn.iocoder.yudao.server.BaseRedisIntegrationTest;
import cn.iocoder.yudao.module.system.mq.consumer.mail.SysMailSendConsumer;
import cn.iocoder.yudao.module.system.mq.consumer.sms.SysSmsSendConsumer;
import cn.iocoder.yudao.module.system.mq.message.mail.SysMailSendMessage;
import cn.iocoder.yudao.module.system.mq.message.sms.SysSmsSendMessage;
import cn.iocoder.yudao.framework.mq.core.util.RedisMessageUtils;
import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate;
import cn.iocoder.yudao.module.system.mq.consumer.mail.MailSendConsumer;
import cn.iocoder.yudao.module.system.mq.consumer.sms.SmsSendConsumer;
import cn.iocoder.yudao.module.system.mq.message.mail.MailSendMessage;
import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage;
import cn.iocoder.yudao.module.system.test.BaseRedisIntegrationTest;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.context.annotation.Import;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;
public class RedisStreamTest {
@Import({SysSmsSendConsumer.class, SysMailSendConsumer.class})
@Import({SmsSendConsumer.class, MailSendConsumer.class})
@Disabled
public static class ConsumerTest extends BaseRedisIntegrationTest {
@ -33,7 +32,7 @@ public class RedisStreamTest {
public static class ProducerTest extends BaseRedisIntegrationTest {
@Resource
private StringRedisTemplate stringRedisTemplate;
private RedisMQTemplate redisMQTemplate;
@Resource
private RedisTemplate<String, Object> redisTemplate;
@ -42,20 +41,20 @@ public class RedisStreamTest {
public void testProducer01() {
for (int i = 0; i < 100; i++) {
// 创建消息
SysSmsSendMessage message = new SysSmsSendMessage();
SmsSendMessage message = new SmsSendMessage();
message.setMobile("15601691300").setApiTemplateId("test:" + i);
// 发送消息
RedisMessageUtils.sendStreamMessage(stringRedisTemplate, message);
redisMQTemplate.send(message);
}
}
@Test
public void testProducer02() {
// 创建消息
SysMailSendMessage message = new SysMailSendMessage();
MailSendMessage message = new MailSendMessage();
message.setAddress("fangfang@mihayou.com").setTemplateCode("test");
// 发送消息
RedisMessageUtils.sendStreamMessage(stringRedisTemplate, message);
redisMQTemplate.send(message);
}
}

View File

@ -0,0 +1,4 @@
/**
* 占位
*/
package cn.iocoder.yudao.module.system.service;

View File

@ -2,16 +2,12 @@ package cn.iocoder.yudao.module.system.service.sms;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.thread.ThreadUtil;
import cn.iocoder.yudao.server.BaseDbAndRedisIntegrationTest;
import cn.iocoder.yudao.module.system.mq.consumer.sms.SysSmsSendConsumer;
import cn.iocoder.yudao.module.system.mq.producer.sms.SysSmsProducer;
import cn.iocoder.yudao.module.system.service.sms.impl.SysSmsChannelServiceImpl;
import cn.iocoder.yudao.module.system.service.sms.impl.SysSmsLogServiceImpl;
import cn.iocoder.yudao.module.system.service.sms.impl.SysSmsTemplateServiceImpl;
import cn.iocoder.yudao.module.system.service.user.SysUserService;
import cn.iocoder.yudao.module.system.service.sms.impl.SysSmsCoreServiceImpl;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.sms.config.YudaoSmsAutoConfiguration;
import cn.iocoder.yudao.module.system.test.BaseDbAndRedisIntegrationTest;
import cn.iocoder.yudao.module.system.mq.consumer.sms.SmsSendConsumer;
import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer;
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.context.annotation.Import;
@ -22,17 +18,17 @@ import java.util.concurrent.TimeUnit;
// TODO @芋艿需要迁移
@Import({YudaoSmsAutoConfiguration.class,
SysSmsChannelServiceImpl.class, SysSmsCoreServiceImpl.class, SysSmsTemplateServiceImpl.class, SysSmsLogServiceImpl.class,
SysSmsProducer.class, SysSmsSendConsumer.class})
public class SysSmsServiceIntegrationTest extends BaseDbAndRedisIntegrationTest {
SmsChannelServiceImpl.class, SmsSendServiceImpl.class, SmsTemplateServiceImpl.class, SmsLogServiceImpl.class,
SmsProducer.class, SmsSendConsumer.class})
public class SmsServiceIntegrationTest extends BaseDbAndRedisIntegrationTest {
@Resource
private SysSmsCoreServiceImpl smsService;
private SmsSendServiceImpl smsService;
@Resource
private SysSmsChannelServiceImpl smsChannelService;
private SmsChannelServiceImpl smsChannelService;
@MockBean
private SysUserService userService;
private AdminUserService userService;
@Test
public void testSendSingleSms_yunpianSuccess() {

View File

@ -0,0 +1,38 @@
package cn.iocoder.yudao.module.system.test;
import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration;
import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration;
import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration;
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
import org.redisson.spring.starter.RedissonAutoConfiguration;
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Import;
import org.springframework.test.context.ActiveProfiles;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbAndRedisIntegrationTest.Application.class)
@ActiveProfiles("integration-test") // 设置使用 application-integration-test 配置文件
public class BaseDbAndRedisIntegrationTest {
@Import({
// DB 配置类
DynamicDataSourceAutoConfiguration.class, // Dynamic Datasource 配置类
YudaoDataSourceAutoConfiguration.class, // 自己的 DB 配置类
DataSourceAutoConfiguration.class, // Spring DB 自动配置类
DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动配置类
// MyBatis 配置类
YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis 配置类
MybatisPlusAutoConfiguration.class, // MyBatis 的自动配置类
// Redis 配置类
RedisAutoConfiguration.class, // Spring Redis 自动配置类
YudaoRedisAutoConfiguration.class, // 自己的 Redis 配置类
RedissonAutoConfiguration.class, // Redisson 自动高配置类
})
public static class Application {
}
}

View File

@ -0,0 +1,23 @@
package cn.iocoder.yudao.module.system.test;
import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration;
import org.redisson.spring.starter.RedissonAutoConfiguration;
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Import;
import org.springframework.test.context.ActiveProfiles;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseRedisIntegrationTest.Application.class)
@ActiveProfiles("integration-test") // 设置使用 application-integration-test 配置文件
public class BaseRedisIntegrationTest {
@Import({
// Redis 配置类
RedisAutoConfiguration.class, // Spring Redis 自动配置类
YudaoRedisAutoConfiguration.class, // 自己的 Redis 配置类
RedissonAutoConfiguration.class, // Redisson 自动高配置类
})
public static class Application {
}
}

View File

@ -0,0 +1,23 @@
package cn.iocoder.yudao.module.tool.dal.mysql.codegen;
import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaColumnDO;
import cn.iocoder.yudao.module.tool.test.BaseDbUnitTest;
import org.junit.jupiter.api.Test;
import javax.annotation.Resource;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class SchemaColumnMapperTest extends BaseDbUnitTest {
@Resource
private SchemaColumnMapper schemaColumnMapper;
@Test
public void testSelectListByTableName() {
List<SchemaColumnDO> columns = schemaColumnMapper.selectListByTableName("", "inf_config");
assertTrue(columns.size() > 0);
}
}

View File

@ -0,0 +1,4 @@
/**
* 占位
*/
package cn.iocoder.yudao.module.tool.dal.mysql;

View File

@ -0,0 +1,4 @@
/**
* 占位
*/
package cn.iocoder.yudao.module.tool.dal;

View File

@ -0,0 +1,34 @@
package cn.iocoder.yudao.module.tool.service.codegen;
import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenColumnDO;
import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenTableDO;
import cn.iocoder.yudao.module.tool.dal.mysql.codegen.CodegenColumnMapper;
import cn.iocoder.yudao.module.tool.dal.mysql.codegen.CodegenTableMapper;
import cn.iocoder.yudao.module.tool.service.codegen.inner.CodegenEngine;
import cn.iocoder.yudao.module.tool.test.BaseDbUnitTest;
import org.junit.jupiter.api.Test;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
public class CodegenEngineTest extends BaseDbUnitTest {
@Resource
private CodegenTableMapper codegenTableMapper;
@Resource
private CodegenColumnMapper codegenColumnMapper;
@Resource
private CodegenEngine codegenEngine;
@Test
public void testExecute() {
CodegenTableDO table = codegenTableMapper.selectById(20);
List<CodegenColumnDO> columns = codegenColumnMapper.selectListByTableId(table.getId());
Map<String, String> result = codegenEngine.execute(table, columns);
result.forEach((s, s2) -> System.out.println(s2));
// System.out.println(result.get("vue/views/system/test/index.vue"));
}
}

View File

@ -1,10 +1,10 @@
package cn.iocoder.yudao.module.tool.service.codegen;
import cn.iocoder.yudao.server.BaseDbUnitTest;
import cn.iocoder.yudao.module.tool.service.codegen.impl.ToolCodegenSQLParser;
import cn.iocoder.yudao.module.tool.service.codegen.inner.CodegenSQLParser;
import cn.iocoder.yudao.module.tool.test.BaseDbUnitTest;
import org.junit.jupiter.api.Test;
public class ToolCodegenSQLParserTest extends BaseDbUnitTest {
public class CodegenSQLParserTest extends BaseDbUnitTest {
@Test
public void testParse() {
@ -22,7 +22,7 @@ public class ToolCodegenSQLParserTest extends BaseDbUnitTest {
" `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',\n" +
" PRIMARY KEY (`id`) USING BTREE\n" +
") ENGINE=InnoDB AUTO_INCREMENT=108 DEFAULT CHARSET=utf8mb4 COMMENT='字典类型表';";
ToolCodegenSQLParser.parse(sql);
CodegenSQLParser.parse(sql);
// TODO 芋艿后续完善断言
}

View File

@ -1,19 +1,18 @@
package cn.iocoder.yudao.module.tool.service.codegen;
import cn.iocoder.yudao.server.BaseDbUnitTest;
import cn.iocoder.yudao.module.tool.service.codegen.impl.ToolCodegenServiceImpl;
import cn.iocoder.yudao.module.tool.test.BaseDbUnitTest;
import org.junit.jupiter.api.Test;
import javax.annotation.Resource;
class ToolCodegenServiceImplTest extends BaseDbUnitTest {
class CodegenServiceImplTest extends BaseDbUnitTest {
@Resource
private ToolCodegenServiceImpl toolCodegenService;
private CodegenServiceImpl codegenService;
@Test
public void tetCreateCodegenTable() {
toolCodegenService.createCodegen("tool_test_demo");
codegenService.createCodegen(0L, "tool_test_demo");
// toolCodegenService.createCodegenTable("tool_codegen_table");
// toolCodegenService.createCodegen("tool_codegen_column");
}

View File

@ -0,0 +1,4 @@
/**
* 占位
*/
package cn.iocoder.yudao.module.tool.service;

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.server;
package cn.iocoder.yudao.module.tool.test;
import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration;
import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration;

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.server;
package cn.iocoder.yudao.module.tool.test;
import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration;
import org.redisson.spring.starter.RedissonAutoConfiguration;

View File

@ -0,0 +1,108 @@
spring:
main:
lazy-initialization: true # 开启懒加载,加快速度
banner-mode: off # 单元测试,禁用 Banner
--- #################### 数据库相关配置 ####################
spring:
# 数据源配置项
autoconfigure:
exclude:
- com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
datasource:
druid: # Druid 【监控】相关的全局配置
web-stat-filter:
enabled: true
stat-view-servlet:
enabled: true
allow: # 设置白名单,不填则允许所有访问
url-pattern: /druid/*
login-username: # 控制台管理用户名和密码
login-password:
filter:
stat:
enabled: true
log-slow-sql: true # 慢 SQL 记录
slow-sql-millis: 100
merge-sql: true
wall:
config:
multi-statement-allow: true
dynamic: # 多数据源配置
druid: # Druid 【连接池】相关的全局配置
initial-size: 5 # 初始连接数
min-idle: 10 # 最小连接池数量
max-active: 20 # 最大连接池数量
max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
test-while-idle: true
test-on-borrow: false
test-on-return: false
primary: master
datasource:
master:
name: ruoyi-vue-pro
url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
driver-class-name: com.mysql.jdbc.Driver
username: root
password: 123456
slave: # 模拟从库,可根据自己需要修改
name: ruoyi-vue-pro
url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
driver-class-name: com.mysql.jdbc.Driver
username: root
password: 123456
# Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
redis:
host: 127.0.0.1 # 地址
port: 6379 # 端口
database: 0 # 数据库索引
mybatis:
lazy-initialization: true # 单元测试,设置 MyBatis Mapper 延迟加载,加速每个单元测试
--- #################### 定时任务相关配置 ####################
--- #################### 配置中心相关配置 ####################
--- #################### 服务保障相关配置 ####################
# Lock4j 配置项(单元测试,禁用 Lock4j
# Resilience4j 配置项
resilience4j:
ratelimiter:
instances:
backendA:
limit-for-period: 1 # 每个周期内,允许的请求数。默认为 50
limit-refresh-period: 60s # 每个周期的时长,单位:微秒。默认为 500
timeout-duration: 1s # 被限流时,阻塞等待的时长,单位:微秒。默认为 5s
register-health-indicator: true # 是否注册到健康监测
--- #################### 监控相关配置 ####################
--- #################### 芋道相关配置 ####################
# 芋道配置项,设置当前项目所有自定义的配置
yudao:
security:
token-header: Authorization
token-secret: abcdefghijklmnopqrstuvwxyz
token-timeout: 1d
session-timeout: 30m
mock-enable: true
mock-secret: test
swagger:
enable: false # 单元测试,禁用 Swagger
file:
base-path: http://127.0.0.1:${server.port}/${yudao.web.api-prefix}/file/get/
xss:
enable: false
exclude-urls: # 如下两个 url仅仅是为了演示去掉配置也没关系
- ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求
- ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求

View File

@ -1,24 +0,0 @@
package cn.iocoder.yudao.module.tool.dal.mysql.codegen;
import cn.iocoder.yudao.server.BaseDbUnitTest;
import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.ToolSchemaColumnDO;
import org.junit.jupiter.api.Test;
import javax.annotation.Resource;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class ToolInformationSchemaColumnMapperTest extends BaseDbUnitTest {
@Resource
private ToolSchemaColumnMapper toolInformationSchemaColumnMapper;
@Test
public void testSelectListByTableName() {
List<ToolSchemaColumnDO> columns = toolInformationSchemaColumnMapper
.selectListByTableName("", "inf_config");
assertTrue(columns.size() > 0);
}
}

View File

@ -1,12 +0,0 @@
package cn.iocoder.yudao.module.tool.dal.mysql.codegen;
import cn.iocoder.yudao.server.BaseDbUnitTest;
import javax.annotation.Resource;
class ToolInformationSchemaTableMapperTest extends BaseDbUnitTest {
@Resource
private ToolSchemaTableMapper toolInformationSchemaTableMapper;
}

View File

@ -1,34 +0,0 @@
package cn.iocoder.yudao.module.tool.service.codegen;
import cn.iocoder.yudao.server.BaseDbUnitTest;
import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.ToolCodegenColumnDO;
import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.ToolCodegenTableDO;
import cn.iocoder.yudao.module.tool.dal.mysql.codegen.ToolCodegenColumnMapper;
import cn.iocoder.yudao.module.tool.dal.mysql.codegen.ToolCodegenTableMapper;
import cn.iocoder.yudao.module.tool.service.codegen.impl.ToolCodegenEngine;
import org.junit.jupiter.api.Test;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
public class ToolCodegenEngineTest extends BaseDbUnitTest {
@Resource
private ToolCodegenTableMapper codegenTableMapper;
@Resource
private ToolCodegenColumnMapper codegenColumnMapper;
@Resource
private ToolCodegenEngine codegenEngine;
@Test
public void testExecute() {
ToolCodegenTableDO table = codegenTableMapper.selectById(20);
List<ToolCodegenColumnDO> columns = codegenColumnMapper.selectListByTableId(table.getId());
Map<String, String> result = codegenEngine.execute(table, columns);
result.forEach((s, s2) -> System.out.println(s2));
// System.out.println(result.get("vue/views/system/test/index.vue"));
}
}