Commit 9a885639ae38844c073aac2ed596939385cb296b

Authored by YunaiV
1 parent 76385af6

【功能修复】单测执行报错的问题

yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/enums/DbTypeEnum.java
@@ -19,9 +19,16 @@ import java.util.stream.Collectors; @@ -19,9 +19,16 @@ import java.util.stream.Collectors;
19 public enum DbTypeEnum { 19 public enum DbTypeEnum {
20 20
21 /** 21 /**
  22 + * H2
  23 + *
  24 + * 注意:H2 不支持 find_in_set 函数
  25 + */
  26 + H2(DbType.H2, "H2", ""),
  27 +
  28 + /**
22 * MySQL 29 * MySQL
23 */ 30 */
24 - MY_SQL( DbType.MYSQL, "MySQL", "FIND_IN_SET('#{value}', #{column}) <> 0"), 31 + MY_SQL(DbType.MYSQL, "MySQL", "FIND_IN_SET('#{value}', #{column}) <> 0"),
25 32
26 /** 33 /**
27 * Oracle 34 * Oracle
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/util/JdbcUtils.java
@@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.common.util.spring.SpringUtils; @@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.common.util.spring.SpringUtils;
5 import cn.iocoder.yudao.framework.mybatis.core.enums.DbTypeEnum; 5 import cn.iocoder.yudao.framework.mybatis.core.enums.DbTypeEnum;
6 import com.baomidou.dynamic.datasource.DynamicRoutingDataSource; 6 import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
7 import com.baomidou.mybatisplus.annotation.DbType; 7 import com.baomidou.mybatisplus.annotation.DbType;
  8 +import org.springframework.beans.factory.NoSuchBeanDefinitionException;
8 9
9 import javax.sql.DataSource; 10 import javax.sql.DataSource;
10 import java.sql.Connection; 11 import java.sql.Connection;
@@ -50,8 +51,13 @@ public class JdbcUtils { @@ -50,8 +51,13 @@ public class JdbcUtils {
50 * @return DB 类型 51 * @return DB 类型
51 */ 52 */
52 public static DbType getDbType() { 53 public static DbType getDbType() {
53 - DynamicRoutingDataSource dynamicRoutingDataSource = SpringUtils.getBean(DynamicRoutingDataSource.class);  
54 - DataSource dataSource = dynamicRoutingDataSource.determineDataSource(); 54 + DataSource dataSource;
  55 + try {
  56 + DynamicRoutingDataSource dynamicRoutingDataSource = SpringUtils.getBean(DynamicRoutingDataSource.class);
  57 + dataSource = dynamicRoutingDataSource.determineDataSource();
  58 + } catch (NoSuchBeanDefinitionException e) {
  59 + dataSource = SpringUtils.getBean(DataSource.class);
  60 + }
55 try (Connection conn = dataSource.getConnection()) { 61 try (Connection conn = dataSource.getConnection()) {
56 return DbTypeEnum.find(conn.getMetaData().getDatabaseProductName()); 62 return DbTypeEnum.find(conn.getMetaData().getDatabaseProductName());
57 } catch (SQLException e) { 63 } catch (SQLException e) {
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/util/MyBatisUtils.java
@@ -96,7 +96,6 @@ public class MyBatisUtils { @@ -96,7 +96,6 @@ public class MyBatisUtils {
96 * @return sql 96 * @return sql
97 */ 97 */
98 public static String findInSet(String column, Object value) { 98 public static String findInSet(String column, Object value) {
99 - // 这里不用SqlConstants.DB_TYPE,因为它是使用 primary 数据源的 url 推断出来的类型  
100 DbType dbType = JdbcUtils.getDbType(); 99 DbType dbType = JdbcUtils.getDbType();
101 return DbTypeEnum.getFindInSetTemplate(dbType) 100 return DbTypeEnum.getFindInSetTemplate(dbType)
102 .replace("#{column}", column) 101 .replace("#{column}", column)
yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseDbAndRedisUnitTest.java
1 package cn.iocoder.yudao.framework.test.core.ut; 1 package cn.iocoder.yudao.framework.test.core.ut;
2 2
  3 +import cn.hutool.extra.spring.SpringUtil;
3 import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; 4 import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration;
4 import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; 5 import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration;
5 import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; 6 import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration;
@@ -44,6 +45,9 @@ public class BaseDbAndRedisUnitTest { @@ -44,6 +45,9 @@ public class BaseDbAndRedisUnitTest {
44 YudaoRedisAutoConfiguration.class, // 自己的 Redis 配置类 45 YudaoRedisAutoConfiguration.class, // 自己的 Redis 配置类
45 RedisAutoConfiguration.class, // Spring Redis 自动配置类 46 RedisAutoConfiguration.class, // Spring Redis 自动配置类
46 RedissonAutoConfiguration.class, // Redisson 自动配置类 47 RedissonAutoConfiguration.class, // Redisson 自动配置类
  48 +
  49 + // 其它配置类
  50 + SpringUtil.class
47 }) 51 })
48 public static class Application { 52 public static class Application {
49 } 53 }
yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseDbUnitTest.java
1 package cn.iocoder.yudao.framework.test.core.ut; 1 package cn.iocoder.yudao.framework.test.core.ut;
2 2
  3 +import cn.hutool.extra.spring.SpringUtil;
3 import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; 4 import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration;
4 import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; 5 import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration;
5 import cn.iocoder.yudao.framework.test.config.SqlInitializationTestConfiguration; 6 import cn.iocoder.yudao.framework.test.config.SqlInitializationTestConfiguration;
@@ -36,6 +37,9 @@ public class BaseDbUnitTest { @@ -36,6 +37,9 @@ public class BaseDbUnitTest {
36 YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis 配置类 37 YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis 配置类
37 MybatisPlusAutoConfiguration.class, // MyBatis 的自动配置类 38 MybatisPlusAutoConfiguration.class, // MyBatis 的自动配置类
38 MybatisPlusJoinAutoConfiguration.class, // MyBatis 的Join配置类 39 MybatisPlusJoinAutoConfiguration.class, // MyBatis 的Join配置类
  40 +
  41 + // 其它配置类
  42 + SpringUtil.class
39 }) 43 })
40 public static class Application { 44 public static class Application {
41 } 45 }
yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseRedisUnitTest.java
1 package cn.iocoder.yudao.framework.test.core.ut; 1 package cn.iocoder.yudao.framework.test.core.ut;
2 2
  3 +import cn.hutool.extra.spring.SpringUtil;
3 import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; 4 import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration;
4 import cn.iocoder.yudao.framework.test.config.RedisTestConfiguration; 5 import cn.iocoder.yudao.framework.test.config.RedisTestConfiguration;
5 import org.redisson.spring.starter.RedissonAutoConfiguration; 6 import org.redisson.spring.starter.RedissonAutoConfiguration;
@@ -25,6 +26,9 @@ public class BaseRedisUnitTest { @@ -25,6 +26,9 @@ public class BaseRedisUnitTest {
25 RedisAutoConfiguration.class, // Spring Redis 自动配置类 26 RedisAutoConfiguration.class, // Spring Redis 自动配置类
26 YudaoRedisAutoConfiguration.class, // 自己的 Redis 配置类 27 YudaoRedisAutoConfiguration.class, // 自己的 Redis 配置类
27 RedissonAutoConfiguration.class, // Redisson 自动配置类 28 RedissonAutoConfiguration.class, // Redisson 自动配置类
  29 +
  30 + // 其它配置类
  31 + SpringUtil.class
28 }) 32 })
29 public static class Application { 33 public static class Application {
30 } 34 }
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/notify/NotifyMessageServiceImplTest.java
@@ -3,18 +3,16 @@ package cn.iocoder.yudao.module.system.service.notify; @@ -3,18 +3,16 @@ package cn.iocoder.yudao.module.system.service.notify;
3 import cn.hutool.core.map.MapUtil; 3 import cn.hutool.core.map.MapUtil;
4 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; 4 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
5 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 -import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants;  
7 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; 6 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
8 import cn.iocoder.yudao.module.system.controller.admin.notify.vo.message.NotifyMessageMyPageReqVO; 7 import cn.iocoder.yudao.module.system.controller.admin.notify.vo.message.NotifyMessageMyPageReqVO;
9 import cn.iocoder.yudao.module.system.controller.admin.notify.vo.message.NotifyMessagePageReqVO; 8 import cn.iocoder.yudao.module.system.controller.admin.notify.vo.message.NotifyMessagePageReqVO;
10 import cn.iocoder.yudao.module.system.dal.dataobject.notify.NotifyMessageDO; 9 import cn.iocoder.yudao.module.system.dal.dataobject.notify.NotifyMessageDO;
11 import cn.iocoder.yudao.module.system.dal.dataobject.notify.NotifyTemplateDO; 10 import cn.iocoder.yudao.module.system.dal.dataobject.notify.NotifyTemplateDO;
12 import cn.iocoder.yudao.module.system.dal.mysql.notify.NotifyMessageMapper; 11 import cn.iocoder.yudao.module.system.dal.mysql.notify.NotifyMessageMapper;
13 -import com.baomidou.mybatisplus.annotation.DbType; 12 +import jakarta.annotation.Resource;
14 import org.junit.jupiter.api.Test; 13 import org.junit.jupiter.api.Test;
15 import org.springframework.context.annotation.Import; 14 import org.springframework.context.annotation.Import;
16 15
17 -import jakarta.annotation.Resource;  
18 import java.util.Arrays; 16 import java.util.Arrays;
19 import java.util.Collection; 17 import java.util.Collection;
20 import java.util.List; 18 import java.util.List;
@@ -158,7 +156,6 @@ public class NotifyMessageServiceImplTest extends BaseDbUnitTest { @@ -158,7 +156,6 @@ public class NotifyMessageServiceImplTest extends BaseDbUnitTest {
158 156
159 @Test 157 @Test
160 public void testGetUnreadNotifyMessageList() { 158 public void testGetUnreadNotifyMessageList() {
161 - SqlConstants.init(DbType.MYSQL);  
162 // mock 数据 159 // mock 数据
163 NotifyMessageDO dbNotifyMessage = randomPojo(NotifyMessageDO.class, o -> { // 等会查询到 160 NotifyMessageDO dbNotifyMessage = randomPojo(NotifyMessageDO.class, o -> { // 等会查询到
164 o.setUserId(1L); 161 o.setUserId(1L);
@@ -187,7 +184,6 @@ public class NotifyMessageServiceImplTest extends BaseDbUnitTest { @@ -187,7 +184,6 @@ public class NotifyMessageServiceImplTest extends BaseDbUnitTest {
187 184
188 @Test 185 @Test
189 public void testGetUnreadNotifyMessageCount() { 186 public void testGetUnreadNotifyMessageCount() {
190 - SqlConstants.init(DbType.MYSQL);  
191 // mock 数据 187 // mock 数据
192 NotifyMessageDO dbNotifyMessage = randomPojo(NotifyMessageDO.class, o -> { // 等会查询到 188 NotifyMessageDO dbNotifyMessage = randomPojo(NotifyMessageDO.class, o -> { // 等会查询到
193 o.setUserId(1L); 189 o.setUserId(1L);
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/sms/SmsCodeServiceImplTest.java
1 package cn.iocoder.yudao.module.system.service.sms; 1 package cn.iocoder.yudao.module.system.service.sms;
2 2
3 import cn.hutool.core.map.MapUtil; 3 import cn.hutool.core.map.MapUtil;
4 -import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants;  
5 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; 4 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
6 import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeSendReqDTO; 5 import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeSendReqDTO;
7 import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO; 6 import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO;
@@ -10,13 +9,12 @@ import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsCodeDO; @@ -10,13 +9,12 @@ import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsCodeDO;
10 import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsCodeMapper; 9 import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsCodeMapper;
11 import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; 10 import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum;
12 import cn.iocoder.yudao.module.system.framework.sms.config.SmsCodeProperties; 11 import cn.iocoder.yudao.module.system.framework.sms.config.SmsCodeProperties;
13 -import com.baomidou.mybatisplus.annotation.DbType; 12 +import jakarta.annotation.Resource;
14 import org.junit.jupiter.api.BeforeEach; 13 import org.junit.jupiter.api.BeforeEach;
15 import org.junit.jupiter.api.Test; 14 import org.junit.jupiter.api.Test;
16 import org.springframework.boot.test.mock.mockito.MockBean; 15 import org.springframework.boot.test.mock.mockito.MockBean;
17 import org.springframework.context.annotation.Import; 16 import org.springframework.context.annotation.Import;
18 17
19 -import jakarta.annotation.Resource;  
20 import java.time.Duration; 18 import java.time.Duration;
21 import java.time.LocalDateTime; 19 import java.time.LocalDateTime;
22 20
@@ -61,8 +59,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest { @@ -61,8 +59,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest {
61 o.setMobile("15601691300"); 59 o.setMobile("15601691300");
62 o.setScene(SmsSceneEnum.MEMBER_LOGIN.getScene()); 60 o.setScene(SmsSceneEnum.MEMBER_LOGIN.getScene());
63 }); 61 });
64 - // mock 方法  
65 - SqlConstants.init(DbType.MYSQL);  
66 62
67 // 调用 63 // 调用
68 smsCodeService.sendSmsCode(reqDTO); 64 smsCodeService.sendSmsCode(reqDTO);
@@ -88,8 +84,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest { @@ -88,8 +84,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest {
88 o.setMobile("15601691300"); 84 o.setMobile("15601691300");
89 o.setScene(SmsSceneEnum.MEMBER_LOGIN.getScene()); 85 o.setScene(SmsSceneEnum.MEMBER_LOGIN.getScene());
90 }); 86 });
91 - // mock 方法  
92 - SqlConstants.init(DbType.MYSQL);  
93 87
94 // 调用,并断言异常 88 // 调用,并断言异常
95 assertServiceException(() -> smsCodeService.sendSmsCode(reqDTO), 89 assertServiceException(() -> smsCodeService.sendSmsCode(reqDTO),
@@ -107,8 +101,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest { @@ -107,8 +101,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest {
107 o.setMobile("15601691300"); 101 o.setMobile("15601691300");
108 o.setScene(SmsSceneEnum.MEMBER_LOGIN.getScene()); 102 o.setScene(SmsSceneEnum.MEMBER_LOGIN.getScene());
109 }); 103 });
110 - // mock 方法  
111 - SqlConstants.init(DbType.MYSQL);  
112 when(smsCodeProperties.getSendFrequency()).thenReturn(Duration.ofMillis(0)); 104 when(smsCodeProperties.getSendFrequency()).thenReturn(Duration.ofMillis(0));
113 105
114 // 调用,并断言异常 106 // 调用,并断言异常
@@ -123,8 +115,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest { @@ -123,8 +115,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest {
123 o.setMobile("15601691300"); 115 o.setMobile("15601691300");
124 o.setScene(randomEle(SmsSceneEnum.values()).getScene()); 116 o.setScene(randomEle(SmsSceneEnum.values()).getScene());
125 }); 117 });
126 - // mock 数据  
127 - SqlConstants.init(DbType.MYSQL);  
128 smsCodeMapper.insert(randomPojo(SmsCodeDO.class, o -> { 118 smsCodeMapper.insert(randomPojo(SmsCodeDO.class, o -> {
129 o.setMobile(reqDTO.getMobile()).setScene(reqDTO.getScene()) 119 o.setMobile(reqDTO.getMobile()).setScene(reqDTO.getScene())
130 .setCode(reqDTO.getCode()).setUsed(false); 120 .setCode(reqDTO.getCode()).setUsed(false);
@@ -146,8 +136,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest { @@ -146,8 +136,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest {
146 o.setMobile("15601691300"); 136 o.setMobile("15601691300");
147 o.setScene(randomEle(SmsSceneEnum.values()).getScene()); 137 o.setScene(randomEle(SmsSceneEnum.values()).getScene());
148 }); 138 });
149 - // mock 数据  
150 - SqlConstants.init(DbType.MYSQL);  
151 smsCodeMapper.insert(randomPojo(SmsCodeDO.class, o -> o.setMobile(reqDTO.getMobile()) 139 smsCodeMapper.insert(randomPojo(SmsCodeDO.class, o -> o.setMobile(reqDTO.getMobile())
152 .setScene(reqDTO.getScene()).setCode(reqDTO.getCode()).setUsed(false))); 140 .setScene(reqDTO.getScene()).setCode(reqDTO.getCode()).setUsed(false)));
153 141
@@ -162,8 +150,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest { @@ -162,8 +150,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest {
162 o.setMobile("15601691300"); 150 o.setMobile("15601691300");
163 o.setScene(randomEle(SmsSceneEnum.values()).getScene()); 151 o.setScene(randomEle(SmsSceneEnum.values()).getScene());
164 }); 152 });
165 - // mock 数据  
166 - SqlConstants.init(DbType.MYSQL);  
167 153
168 // 调用,并断言异常 154 // 调用,并断言异常
169 assertServiceException(() -> smsCodeService.validateSmsCode(reqDTO), 155 assertServiceException(() -> smsCodeService.validateSmsCode(reqDTO),
@@ -177,8 +163,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest { @@ -177,8 +163,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest {
177 o.setMobile("15601691300"); 163 o.setMobile("15601691300");
178 o.setScene(randomEle(SmsSceneEnum.values()).getScene()); 164 o.setScene(randomEle(SmsSceneEnum.values()).getScene());
179 }); 165 });
180 - // mock 数据  
181 - SqlConstants.init(DbType.MYSQL);  
182 smsCodeMapper.insert(randomPojo(SmsCodeDO.class, o -> o.setMobile(reqDTO.getMobile()) 166 smsCodeMapper.insert(randomPojo(SmsCodeDO.class, o -> o.setMobile(reqDTO.getMobile())
183 .setScene(reqDTO.getScene()).setCode(reqDTO.getCode()).setUsed(false) 167 .setScene(reqDTO.getScene()).setCode(reqDTO.getCode()).setUsed(false)
184 .setCreateTime(LocalDateTime.now().minusMinutes(6)))); 168 .setCreateTime(LocalDateTime.now().minusMinutes(6))));
@@ -195,8 +179,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest { @@ -195,8 +179,6 @@ public class SmsCodeServiceImplTest extends BaseDbUnitTest {
195 o.setMobile("15601691300"); 179 o.setMobile("15601691300");
196 o.setScene(randomEle(SmsSceneEnum.values()).getScene()); 180 o.setScene(randomEle(SmsSceneEnum.values()).getScene());
197 }); 181 });
198 - // mock 数据  
199 - SqlConstants.init(DbType.MYSQL);  
200 smsCodeMapper.insert(randomPojo(SmsCodeDO.class, o -> o.setMobile(reqDTO.getMobile()) 182 smsCodeMapper.insert(randomPojo(SmsCodeDO.class, o -> o.setMobile(reqDTO.getMobile())
201 .setScene(reqDTO.getScene()).setCode(reqDTO.getCode()).setUsed(true) 183 .setScene(reqDTO.getScene()).setCode(reqDTO.getCode()).setUsed(true)
202 .setCreateTime(LocalDateTime.now()))); 184 .setCreateTime(LocalDateTime.now())));