22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 1 | package com.example.myproject.controller; |
| 2 | |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 3 | import com.example.myproject.entity.Users; |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 4 | import com.example.myproject.service.UserService; |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 5 | import com.example.myproject.repository.UserRepository; |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 6 | import org.junit.jupiter.api.BeforeEach; |
| 7 | import org.junit.jupiter.api.Test; |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 8 | import org.mockito.InjectMocks; |
| 9 | import org.mockito.Mock; |
| 10 | import org.mockito.MockitoAnnotations; |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 11 | |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 12 | import java.util.HashMap; |
| 13 | import java.util.Map; |
| 14 | import java.util.Optional; |
| 15 | |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 16 | import static org.mockito.Mockito.*; |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 17 | import static org.junit.jupiter.api.Assertions.*; |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 18 | |
| 19 | class UserControllerTest { |
| 20 | |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 21 | @Mock |
| 22 | private UserService userService; |
| 23 | |
| 24 | @Mock |
| 25 | private UserRepository userRepository; |
| 26 | |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 27 | @InjectMocks |
| 28 | private UserController userController; |
| 29 | |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 30 | @BeforeEach |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 31 | void setUp() { |
| 32 | // 初始化模拟对象 |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 33 | MockitoAnnotations.openMocks(this); |
| 34 | } |
| 35 | |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 36 | // 测试生成邀请码接口 |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 37 | @Test |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 38 | void testGenerateInviteCode() { |
| 39 | // 设置输入数据 |
| 40 | Map<String, Object> request = new HashMap<>(); |
| 41 | request.put("user_id", 1L); |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 42 | |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 43 | // 模拟服务层的返回 |
| 44 | Map<String, Object> responseMap = new HashMap<>(); |
| 45 | responseMap.put("status", "success"); |
| 46 | responseMap.put("message", "邀请码生成成功"); |
| 47 | responseMap.put("invite_code", "ABC123XYZ"); |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 48 | |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 49 | when(userService.generateInviteCode(1L)).thenReturn(responseMap); |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 50 | |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 51 | // 调用控制器方法 |
| 52 | Map<String, Object> resultMap = userController.generateInviteCode(request); |
| 53 | |
| 54 | // 验证返回结果 |
| 55 | assertEquals("success", resultMap.get("status")); |
| 56 | assertEquals("邀请码生成成功", resultMap.get("message")); |
| 57 | assertEquals("ABC123XYZ", resultMap.get("invite_code")); |
| 58 | |
| 59 | // 验证服务层方法是否被调用 |
| 60 | verify(userService, times(1)).generateInviteCode(1L); |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 61 | } |
| 62 | |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 63 | // 测试用户修改密码接口 |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 64 | @Test |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 65 | void testChangePassword() { |
| 66 | Long userId = 1L; |
| 67 | Map<String, Object> request = new HashMap<>(); |
| 68 | request.put("user_id", userId); |
| 69 | request.put("old_password", "oldPassword"); |
| 70 | request.put("new_password", "newPassword"); |
| 71 | request.put("confirm_password", "newPassword"); |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 72 | |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 73 | // 模拟服务层的返回 |
| 74 | String resultMessage = "密码修改成功"; |
| 75 | when(userService.changePassword(userId, "oldPassword", "newPassword", "newPassword")) |
| 76 | .thenReturn(resultMessage); |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 77 | |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 78 | // 调用控制器方法 |
| 79 | Map<String, Object> resultMap = userController.changePassword(request); |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 80 | |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 81 | // 验证返回结果 |
| 82 | assertEquals("密码修改成功", resultMap.get("message")); |
| 83 | assertEquals("success", resultMap.get("status")); |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 84 | |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 85 | // 验证服务层方法是否被调用 |
| 86 | verify(userService, times(1)).changePassword(userId, "oldPassword", "newPassword", "newPassword"); |
| 87 | } |
| 88 | |
| 89 | // 测试用户注册接口 |
| 90 | @Test |
| 91 | void testRegister() { |
| 92 | // 设置输入数据 |
| 93 | Map<String, Object> request = new HashMap<>(); |
| 94 | request.put("username", "testUser"); |
| 95 | request.put("email", "test@example.com"); |
| 96 | request.put("password", "password"); |
| 97 | request.put("role", "USER"); |
| 98 | request.put("inviteCode", "12345"); |
| 99 | |
| 100 | // 模拟服务层的返回 |
| 101 | String resultMessage = "用户注册成功"; |
| 102 | when(userService.registerUser("testUser", "test@example.com", "password", "USER", "12345")) |
| 103 | .thenReturn(resultMessage); |
| 104 | |
| 105 | // 调用控制器方法 |
| 106 | Map<String, Object> resultMap = userController.register(request); |
| 107 | |
| 108 | // 验证返回结果 |
| 109 | assertEquals("用户注册成功", resultMap.get("msg")); |
| 110 | |
| 111 | // 验证服务层方法是否被调用 |
| 112 | verify(userService, times(1)).registerUser("testUser", "test@example.com", "password", "USER", "12345"); |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 113 | } |
| 114 | |
| 115 | @Test |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 116 | void testLogin() { |
| 117 | String username = "testUser"; |
| 118 | String password = "password"; |
| 119 | |
| 120 | // 模拟服务层的返回 |
| 121 | String loginMessage = "登录成功"; |
| 122 | when(userService.loginUser("testUser", "password")).thenReturn(loginMessage); |
| 123 | |
| 124 | // 模拟用户查询 |
| 125 | Users user = new Users(); |
| 126 | user.setUserId(1L); |
| 127 | user.setUsername("testUser"); |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 128 | user.setEmail("test@example.com"); |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 129 | when(userRepository.findByUsername("testUser")).thenReturn(Optional.of(user)); |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 130 | |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 131 | // 设置请求数据 |
| 132 | Map<String, Object> request = new HashMap<>(); |
| 133 | request.put("username", username); |
| 134 | request.put("password", password); |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 135 | |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 136 | // 调用控制器方法 |
| 137 | Map<String, Object> resultMap = userController.login(request); |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 138 | |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 139 | // 验证返回结果 |
| 140 | assertEquals("登录成功", resultMap.get("msg")); |
| 141 | |
| 142 | // 验证 user 不是 Map 类型,而是 Users 对象 |
| 143 | Users loggedInUser = (Users) resultMap.get("user"); |
| 144 | assertNotNull(loggedInUser); |
| 145 | assertEquals("testUser", loggedInUser.getUsername()); |
| 146 | assertEquals("test@example.com", loggedInUser.getEmail()); |
| 147 | |
| 148 | // 验证服务层方法是否被调用 |
| 149 | verify(userService, times(1)).loginUser("testUser", "password"); |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 150 | } |
| 151 | |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 152 | |
| 153 | // 测试获取用户个人资料接口 |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 154 | @Test |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 155 | void testGetProfile() { |
| 156 | Long userId = 1L; |
| 157 | |
| 158 | // Mock 用户数据 |
| 159 | Users user = new Users(); |
| 160 | user.setUserId(userId); |
| 161 | user.setUsername("testUser"); |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 162 | user.setEmail("test@example.com"); |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 163 | user.setAvatarUrl("https://example.com/avatar.jpg"); |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 164 | |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 165 | // 模拟服务层返回 |
| 166 | Map<String, Object> profileData = new HashMap<>(); |
| 167 | profileData.put("avatarUrl", user.getAvatarUrl()); |
| 168 | profileData.put("username", user.getUsername()); |
| 169 | profileData.put("email", user.getEmail()); |
| 170 | when(userService.getProfile(userId)).thenReturn(profileData); |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 171 | |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 172 | // 调用控制器方法 |
| 173 | Map<String, Object> resultMap = userController.getProfile(userId); |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 174 | |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 175 | // 验证返回结果 |
| 176 | assertEquals("testUser", resultMap.get("username")); |
| 177 | assertEquals("test@example.com", resultMap.get("email")); |
| 178 | assertEquals("https://example.com/avatar.jpg", resultMap.get("avatarUrl")); |
| 179 | |
| 180 | // 验证服务层方法是否被调用 |
| 181 | verify(userService, times(1)).getProfile(userId); |
| 182 | } |
| 183 | |
| 184 | // 测试修改用户个人资料接口 |
| 185 | @Test |
| 186 | void testEditProfile() { |
| 187 | Long userId = 1L; |
| 188 | Map<String, Object> profileData = new HashMap<>(); |
| 189 | profileData.put("avatarUrl", "https://example.com/avatar.jpg"); |
| 190 | profileData.put("nickname", "newNickname"); |
| 191 | profileData.put("gender", "Male"); |
| 192 | profileData.put("description", "Updated description"); |
| 193 | profileData.put("hobbies", "Reading, Hiking"); |
| 194 | |
| 195 | // 模拟服务层的返回 |
| 196 | when(userService.editProfile(userId, "https://example.com/avatar.jpg", "newNickname", "Male", "Updated description", "Reading, Hiking")) |
| 197 | .thenReturn(true); |
| 198 | |
| 199 | // 调用控制器方法 |
| 200 | Map<String, String> resultMap = userController.editProfile(userId, profileData); |
| 201 | |
| 202 | // 验证返回结果 |
| 203 | assertEquals("用户资料更新成功", resultMap.get("message")); |
| 204 | |
| 205 | // 验证服务层方法是否被调用 |
| 206 | verify(userService, times(1)).editProfile(userId, "https://example.com/avatar.jpg", "newNickname", "Male", "Updated description", "Reading, Hiking"); |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 207 | } |
| 208 | |
| 209 | @Test |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 210 | public void testCalculateShareRate() { |
| 211 | Long userId = 1L; |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 212 | |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 213 | // 模拟 UserService 返回的结果 |
| 214 | Map<String, Object> expectedResponse = Map.of( |
| 215 | "status", "success", |
| 216 | "message", "分享率计算成功", |
| 217 | "shareRate", 0.5f |
| 218 | ); |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 219 | |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 220 | // 设置用户数据 |
| 221 | Users user = new Users(); |
| 222 | user.setUserId(userId); |
| 223 | user.setUploadCount(50f); // 上传量为50 |
| 224 | user.setDownloadCount(100f); // 下载量为100 |
| 225 | when(userService.calculateShareRate(userId)).thenReturn(expectedResponse); |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 226 | |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 227 | // 调用接口 |
| 228 | Map<String, Object> result = userController.calculateShareRate(userId); |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 229 | |
22301138 | f682451 | 2025-06-04 02:03:13 +0800 | [diff] [blame] | 230 | // 验证结果 |
| 231 | assertEquals(expectedResponse, result); |
| 232 | verify(userService, times(1)).calculateShareRate(userId); // 验证服务方法是否被调用 |
22301115 | cf6dba2 | 2025-03-25 19:06:21 +0800 | [diff] [blame] | 233 | } |
| 234 | } |