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