实现分区,作品,用户等的增删改查,并完成配套测试文件
Change-Id: Ibdcd6944106b7ffba30c63e4c878d66fa0213303
diff --git a/src/test/java/edu/bjtu/groupone/backend/UserServImplTest.java b/src/test/java/edu/bjtu/groupone/backend/UserServImplTest.java
index ab5a354..e877de8 100644
--- a/src/test/java/edu/bjtu/groupone/backend/UserServImplTest.java
+++ b/src/test/java/edu/bjtu/groupone/backend/UserServImplTest.java
@@ -1,9 +1,8 @@
package edu.bjtu.groupone.backend;
-import edu.bjtu.groupone.backend.mapper.UserMapper;
-import edu.bjtu.groupone.backend.utils.EmailUtil;
-import edu.bjtu.groupone.backend.service.impl.UserServImpl;
import edu.bjtu.groupone.backend.domain.entity.User;
+import edu.bjtu.groupone.backend.mapper.UserMapper;
+import edu.bjtu.groupone.backend.service.impl.UserServImpl;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -11,114 +10,81 @@
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
-import java.lang.reflect.Field;
+import java.util.Arrays;
+import java.util.List;
-import static org.assertj.core.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.*;
-/**
- * 单元测试 UserServImpl 的核心逻辑:登录、发/验注册码、发/验重置码、重置密码。
- */
@ExtendWith(MockitoExtension.class)
-public class UserServImplTest {
+class UserServiceImplTest {
@Mock
private UserMapper userMapper;
- @Mock
- private EmailUtil emailUtil;
-
@InjectMocks
private UserServImpl userService;
+ private User testUser;
+
@BeforeEach
- void clearCaches() throws Exception {
- clearMap("emailCodes");
- clearMap("resetCodes");
+ void setUp() {
+ testUser = new User();
+ testUser.setUserId(1);
+ testUser.setUsername("testuser");
+ testUser.setEmail("test@example.com");
}
@Test
- public void login_shouldReturnUser_whenCredentialsMatch() {
- User in = new User();
- in.setEmail("a@b.com");
- in.setPassword("pwd");
- User out = new User();
- out.setUserId(1);
- out.setUsername("alice");
- out.setEmail("a@b.com");
- when(userMapper.login(in)).thenReturn(out);
+ void deleteUser_shouldCallMapper() {
+ // 模拟
+ when(userMapper.deleteUser(1)).thenReturn(1);
- User result = userService.login(in);
- assertThat(result).isSameAs(out);
- verify(userMapper, times(1)).login(in);
+ // 调用
+ userService.deleteUser(1);
+
+ // 验证
+ verify(userMapper, times(1)).deleteUser(1);
}
@Test
- public void sendVerification_and_verifyCode_workCorrectly() throws Exception {
- String email = "test@x.com";
- userService.sendVerificationCode(email);
- verify(emailUtil).sendVerificationEmail(eq(email), anyString());
+ void updateUser_shouldCallMapper() {
+ // 模拟
+ when(userMapper.updateUser(any(User.class))).thenReturn(1);
- String stored = readMap("emailCodes", email);
- String code = stored.split("\\|")[0];
- assertThat(userService.verifyCode(email, code)).isTrue();
- assertThat(userService.verifyCode(email, "000000")).isFalse();
+ // 调用
+ userService.updateUser(testUser);
- // 模拟过期
- patchExpiry("emailCodes", email, -1000L);
- assertThat(userService.verifyCode(email, code)).isFalse();
+ // 验证
+ verify(userMapper, times(1)).updateUser(any(User.class));
}
@Test
- public void sendResetCode_and_resetPassword_workCorrectly() throws Exception {
- String email = "reset@x.com";
- when(userMapper.selectByEmail(email)).thenReturn(null);
- assertThatThrownBy(() -> userService.sendResetCode(email))
- .isInstanceOf(IllegalArgumentException.class);
+ void getUserById_shouldReturnUser() {
+ // 模拟
+ when(userMapper.selectUserById(1)).thenReturn(testUser);
- User u = new User();
- u.setEmail(email);
- when(userMapper.selectByEmail(email)).thenReturn(u);
+ // 调用
+ User result = userService.getUserById(1);
- userService.sendResetCode(email);
- verify(emailUtil).sendVerificationEmail(eq(email), anyString());
- String stored = readMap("resetCodes", email);
- String code = stored.split("\\|")[0];
-
- when(userMapper.updatePasswordByEmail(email, "newpwd")).thenReturn(1);
- assertThat(userService.resetPassword(email, code, "newpwd")).isTrue();
- assertThat(userService.resetPassword(email, code, "abc")).isFalse();
-
- userService.sendResetCode(email);
- String stored2 = readMap("resetCodes", email);
- String code2 = stored2.split("\\|")[0];
- patchExpiry("resetCodes", email, -2000L);
- assertThat(userService.resetPassword(email, code2, "pw")).isFalse();
+ // 验证
+ assertEquals(testUser, result);
+ verify(userMapper, times(1)).selectUserById(1);
}
- // --- 反射辅助方法 ---
- @SuppressWarnings("unchecked")
- private void clearMap(String fieldName) throws Exception {
- Field f = UserServImpl.class.getDeclaredField(fieldName);
- f.setAccessible(true);
- ((java.util.Map<String, String>)f.get(userService)).clear();
- }
+ @Test
+ void getAllUsers_shouldReturnList() {
+ // 模拟
+ List<User> users = Arrays.asList(testUser, new User());
+ when(userMapper.selectAllUsers()).thenReturn(users);
- @SuppressWarnings("unchecked")
- private String readMap(String fieldName, String key) throws Exception {
- Field f = UserServImpl.class.getDeclaredField(fieldName);
- f.setAccessible(true);
- return ((java.util.Map<String, String>)f.get(userService)).get(key);
- }
+ // 调用
+ List<User> result = userService.getAllUsers();
- @SuppressWarnings("unchecked")
- private void patchExpiry(String fieldName, String key, long offsetMs) throws Exception {
- String combined = readMap(fieldName, key);
- String code = combined.split("\\|")[0];
- long expire = System.currentTimeMillis() + offsetMs;
- String updated = code + "|" + expire;
- Field f = UserServImpl.class.getDeclaredField(fieldName);
- f.setAccessible(true);
- ((java.util.Map<String, String>)f.get(userService)).put(key, updated);
+ // 验证
+ assertEquals(2, result.size());
+ verify(userMapper, times(1)).selectAllUsers();
}
-}
+}
\ No newline at end of file