mirror of
				https://github.com/YunaiV/ruoyi-vue-pro.git
				synced 2025-10-31 10:37:41 +08:00 
			
		
		
		
	开始编写 SysAuthServiceImpl 的单元测试
This commit is contained in:
		| @ -7,8 +7,7 @@ import cn.iocoder.dashboard.modules.system.enums.common.SysSexEnum; | |||||||
| import com.baomidou.mybatisplus.annotation.TableField; | import com.baomidou.mybatisplus.annotation.TableField; | ||||||
| import com.baomidou.mybatisplus.annotation.TableId; | import com.baomidou.mybatisplus.annotation.TableId; | ||||||
| import com.baomidou.mybatisplus.annotation.TableName; | import com.baomidou.mybatisplus.annotation.TableName; | ||||||
| import lombok.Data; | import lombok.*; | ||||||
| import lombok.EqualsAndHashCode; |  | ||||||
| import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; | import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; | ||||||
|  |  | ||||||
| import java.util.Date; | import java.util.Date; | ||||||
| @ -22,6 +21,9 @@ import java.util.Set; | |||||||
| @TableName(value = "sys_user", autoResultMap = true) | @TableName(value = "sys_user", autoResultMap = true) | ||||||
| @Data | @Data | ||||||
| @EqualsAndHashCode(callSuper = true) | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @Builder | ||||||
|  | @NoArgsConstructor | ||||||
|  | @AllArgsConstructor | ||||||
| public class SysUserDO extends BaseDO { | public class SysUserDO extends BaseDO { | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ import org.springframework.test.context.jdbc.Sql; | |||||||
|  |  | ||||||
| import javax.annotation.Resource; | import javax.annotation.Resource; | ||||||
|  |  | ||||||
| @SpringBootTest | @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE) | ||||||
| @ActiveProfiles("unit-test") // 设置使用 application-unit-test 配置文件 | @ActiveProfiles("unit-test") // 设置使用 application-unit-test 配置文件 | ||||||
| @Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // 每个单元测试结束后,清理 DB | @Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // 每个单元测试结束后,清理 DB | ||||||
| public class BaseSpringBootUnitTest { | public class BaseSpringBootUnitTest { | ||||||
|  | |||||||
| @ -18,14 +18,6 @@ import java.io.IOException; | |||||||
| @AutoConfigureBefore({RedisAutoConfiguration.class, RedissonAutoConfiguration.class}) // 在 Redis 自动配置前,进行初始化 | @AutoConfigureBefore({RedisAutoConfiguration.class, RedissonAutoConfiguration.class}) // 在 Redis 自动配置前,进行初始化 | ||||||
| public class RedisTestConfiguration { | public class RedisTestConfiguration { | ||||||
|  |  | ||||||
| //    /** |  | ||||||
| //     * 创建模拟的 Redis Server 服务器 |  | ||||||
| //     */ |  | ||||||
| //    @Bean(initMethod = "start", destroyMethod = "stop") |  | ||||||
| //    public RedisServer redisServer(RedisProperties properties) throws IOException { |  | ||||||
| //        return new RedisServer(properties.getPort()); |  | ||||||
| //    } |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 创建模拟的 Redis Server 服务器 |      * 创建模拟的 Redis Server 服务器 | ||||||
|      */ |      */ | ||||||
|  | |||||||
| @ -0,0 +1,33 @@ | |||||||
|  | package cn.iocoder.dashboard.modules.system.service.auth; | ||||||
|  |  | ||||||
|  | import cn.iocoder.dashboard.BaseSpringBootUnitTest; | ||||||
|  | import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO; | ||||||
|  | import cn.iocoder.dashboard.modules.system.service.auth.impl.SysAuthServiceImpl; | ||||||
|  | import cn.iocoder.dashboard.modules.system.service.user.SysUserService; | ||||||
|  | import org.junit.jupiter.api.Test; | ||||||
|  | import org.springframework.boot.test.mock.mockito.MockBean; | ||||||
|  |  | ||||||
|  | import javax.annotation.Resource; | ||||||
|  |  | ||||||
|  | import static cn.iocoder.dashboard.util.RandomUtils.*; | ||||||
|  | import static org.mockito.ArgumentMatchers.eq; | ||||||
|  | import static org.mockito.Mockito.when; | ||||||
|  |  | ||||||
|  | public class SysAuthServiceImplTest extends BaseSpringBootUnitTest { | ||||||
|  |  | ||||||
|  |     @Resource | ||||||
|  |     private SysAuthServiceImpl authService; | ||||||
|  |  | ||||||
|  |     @MockBean | ||||||
|  |     private SysUserService userService; | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     public void testLoadUserByUsername_success() { | ||||||
|  |         // 准备参数 | ||||||
|  |         String username = randomString(); | ||||||
|  |         // mock 方法 | ||||||
|  |         SysUserDO user = randomUserDO(); | ||||||
|  |         when(userService.getUserByUserName(eq(username))).thenReturn(user); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1 @@ | |||||||
|  | package cn.iocoder.dashboard.modules.system.service; | ||||||
							
								
								
									
										66
									
								
								src/test/java/cn/iocoder/dashboard/util/RandomUtils.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								src/test/java/cn/iocoder/dashboard/util/RandomUtils.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,66 @@ | |||||||
|  | package cn.iocoder.dashboard.util; | ||||||
|  |  | ||||||
|  | import cn.hutool.core.util.*; | ||||||
|  | import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO; | ||||||
|  |  | ||||||
|  | import java.lang.reflect.Field; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 随机工具类 | ||||||
|  |  * | ||||||
|  |  * @author 芋道源码 | ||||||
|  |  */ | ||||||
|  | public class RandomUtils { | ||||||
|  |  | ||||||
|  |     private static final int RANDOM_STRING_LENGTH = 10; | ||||||
|  |  | ||||||
|  |     public static String randomString() { | ||||||
|  |         return RandomUtil.randomString(RANDOM_STRING_LENGTH); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static Long randomLong() { | ||||||
|  |         return RandomUtil.randomLong(0, Long.MAX_VALUE); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static Integer randomInteger() { | ||||||
|  |         return RandomUtil.randomInt(0, Integer.MAX_VALUE); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static Short randomShort() { | ||||||
|  |         return (short) RandomUtil.randomInt(0, Short.MAX_VALUE); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static SysUserDO randomUserDO() { | ||||||
|  |         SysUserDO user = randomObject(SysUserDO.class); | ||||||
|  |         return user; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private static <T> T randomObject(Class<T> clazz) { | ||||||
|  |         // 创建对象 | ||||||
|  |         T object = ReflectUtil.newInstance(clazz); | ||||||
|  |         // 遍历属性,设置随机值 | ||||||
|  |         for (Field field : ReflectUtil.getFields(clazz)) { | ||||||
|  |             // 数字类型 | ||||||
|  |             if (field.getType() == Long.class) { | ||||||
|  |                 ReflectUtil.setFieldValue(object, field, randomLong()); | ||||||
|  |                 continue; | ||||||
|  |             } | ||||||
|  |             if (field.getType() == Integer.class) { | ||||||
|  |                 ReflectUtil.setFieldValue(object, field, randomInteger()); | ||||||
|  |                 continue; | ||||||
|  |             } | ||||||
|  |             if (field.getType() == Short.class) { | ||||||
|  |                 ReflectUtil.setFieldValue(object, field, randomShort()); | ||||||
|  |                 continue; | ||||||
|  |             } | ||||||
|  |             // 字符串类型 | ||||||
|  |             if (field.getType() == String.class) { | ||||||
|  |                 ReflectUtil.setFieldValue(object, field, randomString()); | ||||||
|  |                 continue; | ||||||
|  |             } | ||||||
|  | //            System.out.println(); | ||||||
|  |         } | ||||||
|  |         return object; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV