Commit 92997a0cd57d0c9bd5d77ab3ff165501c47ed945
1 parent
e9f2e91f
开始编写 SysAuthServiceImpl 的单元测试
Showing
6 changed files
with
105 additions
and
11 deletions
src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/user/SysUserDO.java
| @@ -7,8 +7,7 @@ import cn.iocoder.dashboard.modules.system.enums.common.SysSexEnum; | @@ -7,8 +7,7 @@ import cn.iocoder.dashboard.modules.system.enums.common.SysSexEnum; | ||
| 7 | import com.baomidou.mybatisplus.annotation.TableField; | 7 | import com.baomidou.mybatisplus.annotation.TableField; |
| 8 | import com.baomidou.mybatisplus.annotation.TableId; | 8 | import com.baomidou.mybatisplus.annotation.TableId; |
| 9 | import com.baomidou.mybatisplus.annotation.TableName; | 9 | import com.baomidou.mybatisplus.annotation.TableName; |
| 10 | -import lombok.Data; | ||
| 11 | -import lombok.EqualsAndHashCode; | 10 | +import lombok.*; |
| 12 | import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; | 11 | import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; |
| 13 | 12 | ||
| 14 | import java.util.Date; | 13 | import java.util.Date; |
| @@ -22,6 +21,9 @@ import java.util.Set; | @@ -22,6 +21,9 @@ import java.util.Set; | ||
| 22 | @TableName(value = "sys_user", autoResultMap = true) | 21 | @TableName(value = "sys_user", autoResultMap = true) |
| 23 | @Data | 22 | @Data |
| 24 | @EqualsAndHashCode(callSuper = true) | 23 | @EqualsAndHashCode(callSuper = true) |
| 24 | +@Builder | ||
| 25 | +@NoArgsConstructor | ||
| 26 | +@AllArgsConstructor | ||
| 25 | public class SysUserDO extends BaseDO { | 27 | public class SysUserDO extends BaseDO { |
| 26 | 28 | ||
| 27 | /** | 29 | /** |
src/test/java/cn/iocoder/dashboard/BaseSpringBootUnitTest.java
| @@ -9,7 +9,7 @@ import org.springframework.test.context.jdbc.Sql; | @@ -9,7 +9,7 @@ import org.springframework.test.context.jdbc.Sql; | ||
| 9 | 9 | ||
| 10 | import javax.annotation.Resource; | 10 | import javax.annotation.Resource; |
| 11 | 11 | ||
| 12 | -@SpringBootTest | 12 | +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE) |
| 13 | @ActiveProfiles("unit-test") // 设置使用 application-unit-test 配置文件 | 13 | @ActiveProfiles("unit-test") // 设置使用 application-unit-test 配置文件 |
| 14 | @Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // 每个单元测试结束后,清理 DB | 14 | @Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // 每个单元测试结束后,清理 DB |
| 15 | public class BaseSpringBootUnitTest { | 15 | public class BaseSpringBootUnitTest { |
src/test/java/cn/iocoder/dashboard/config/RedisTestConfiguration.java
| @@ -18,14 +18,6 @@ import java.io.IOException; | @@ -18,14 +18,6 @@ import java.io.IOException; | ||
| 18 | @AutoConfigureBefore({RedisAutoConfiguration.class, RedissonAutoConfiguration.class}) // 在 Redis 自动配置前,进行初始化 | 18 | @AutoConfigureBefore({RedisAutoConfiguration.class, RedissonAutoConfiguration.class}) // 在 Redis 自动配置前,进行初始化 |
| 19 | public class RedisTestConfiguration { | 19 | public class RedisTestConfiguration { |
| 20 | 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 | /** | 21 | /** |
| 30 | * 创建模拟的 Redis Server 服务器 | 22 | * 创建模拟的 Redis Server 服务器 |
| 31 | */ | 23 | */ |
src/test/java/cn/iocoder/dashboard/modules/system/service/auth/SysAuthServiceImplTest.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.service.auth; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.BaseSpringBootUnitTest; | ||
| 4 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO; | ||
| 5 | +import cn.iocoder.dashboard.modules.system.service.auth.impl.SysAuthServiceImpl; | ||
| 6 | +import cn.iocoder.dashboard.modules.system.service.user.SysUserService; | ||
| 7 | +import org.junit.jupiter.api.Test; | ||
| 8 | +import org.springframework.boot.test.mock.mockito.MockBean; | ||
| 9 | + | ||
| 10 | +import javax.annotation.Resource; | ||
| 11 | + | ||
| 12 | +import static cn.iocoder.dashboard.util.RandomUtils.*; | ||
| 13 | +import static org.mockito.ArgumentMatchers.eq; | ||
| 14 | +import static org.mockito.Mockito.when; | ||
| 15 | + | ||
| 16 | +public class SysAuthServiceImplTest extends BaseSpringBootUnitTest { | ||
| 17 | + | ||
| 18 | + @Resource | ||
| 19 | + private SysAuthServiceImpl authService; | ||
| 20 | + | ||
| 21 | + @MockBean | ||
| 22 | + private SysUserService userService; | ||
| 23 | + | ||
| 24 | + @Test | ||
| 25 | + public void testLoadUserByUsername_success() { | ||
| 26 | + // 准备参数 | ||
| 27 | + String username = randomString(); | ||
| 28 | + // mock 方法 | ||
| 29 | + SysUserDO user = randomUserDO(); | ||
| 30 | + when(userService.getUserByUserName(eq(username))).thenReturn(user); | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | +} |
src/test/java/cn/iocoder/dashboard/modules/system/service/package-info.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.service; |
src/test/java/cn/iocoder/dashboard/util/RandomUtils.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.util; | ||
| 2 | + | ||
| 3 | +import cn.hutool.core.util.*; | ||
| 4 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO; | ||
| 5 | + | ||
| 6 | +import java.lang.reflect.Field; | ||
| 7 | + | ||
| 8 | +/** | ||
| 9 | + * 随机工具类 | ||
| 10 | + * | ||
| 11 | + * @author 芋道源码 | ||
| 12 | + */ | ||
| 13 | +public class RandomUtils { | ||
| 14 | + | ||
| 15 | + private static final int RANDOM_STRING_LENGTH = 10; | ||
| 16 | + | ||
| 17 | + public static String randomString() { | ||
| 18 | + return RandomUtil.randomString(RANDOM_STRING_LENGTH); | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + public static Long randomLong() { | ||
| 22 | + return RandomUtil.randomLong(0, Long.MAX_VALUE); | ||
| 23 | + } | ||
| 24 | + | ||
| 25 | + public static Integer randomInteger() { | ||
| 26 | + return RandomUtil.randomInt(0, Integer.MAX_VALUE); | ||
| 27 | + } | ||
| 28 | + | ||
| 29 | + public static Short randomShort() { | ||
| 30 | + return (short) RandomUtil.randomInt(0, Short.MAX_VALUE); | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + public static SysUserDO randomUserDO() { | ||
| 34 | + SysUserDO user = randomObject(SysUserDO.class); | ||
| 35 | + return user; | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + private static <T> T randomObject(Class<T> clazz) { | ||
| 39 | + // 创建对象 | ||
| 40 | + T object = ReflectUtil.newInstance(clazz); | ||
| 41 | + // 遍历属性,设置随机值 | ||
| 42 | + for (Field field : ReflectUtil.getFields(clazz)) { | ||
| 43 | + // 数字类型 | ||
| 44 | + if (field.getType() == Long.class) { | ||
| 45 | + ReflectUtil.setFieldValue(object, field, randomLong()); | ||
| 46 | + continue; | ||
| 47 | + } | ||
| 48 | + if (field.getType() == Integer.class) { | ||
| 49 | + ReflectUtil.setFieldValue(object, field, randomInteger()); | ||
| 50 | + continue; | ||
| 51 | + } | ||
| 52 | + if (field.getType() == Short.class) { | ||
| 53 | + ReflectUtil.setFieldValue(object, field, randomShort()); | ||
| 54 | + continue; | ||
| 55 | + } | ||
| 56 | + // 字符串类型 | ||
| 57 | + if (field.getType() == String.class) { | ||
| 58 | + ReflectUtil.setFieldValue(object, field, randomString()); | ||
| 59 | + continue; | ||
| 60 | + } | ||
| 61 | +// System.out.println(); | ||
| 62 | + } | ||
| 63 | + return object; | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | +} |