Sure233 | 8188c5d | 2025-05-28 11:43:06 +0800 | [diff] [blame] | 1 | package com.pt5.pthouduan.ControllerTest; |
| 2 | |
21301050 | e4db6a9 | 2025-06-08 23:42:43 +0800 | [diff] [blame] | 3 | |
Sure233 | 8188c5d | 2025-05-28 11:43:06 +0800 | [diff] [blame] | 4 | import com.pt5.pthouduan.controller.InvitesController; |
| 5 | import com.pt5.pthouduan.service.InviteService; |
| 6 | import org.junit.jupiter.api.BeforeEach; |
| 7 | import org.junit.jupiter.api.Test; |
| 8 | import org.mockito.InjectMocks; |
| 9 | import org.mockito.Mock; |
| 10 | import org.mockito.MockitoAnnotations; |
| 11 | |
| 12 | import java.util.HashMap; |
| 13 | import java.util.Map; |
| 14 | |
| 15 | import static org.junit.jupiter.api.Assertions.*; |
| 16 | import static org.mockito.ArgumentMatchers.anyString; |
| 17 | import static org.mockito.Mockito.*; |
| 18 | |
| 19 | class InvitesControllerTest { |
| 20 | |
| 21 | @Mock |
| 22 | private InviteService inviteService; |
| 23 | |
| 24 | @InjectMocks |
| 25 | private InvitesController invitesController; |
| 26 | |
| 27 | @BeforeEach |
| 28 | void setUp() { |
| 29 | MockitoAnnotations.openMocks(this); |
| 30 | } |
| 31 | |
| 32 | @Test |
21301050 | e4db6a9 | 2025-06-08 23:42:43 +0800 | [diff] [blame] | 33 | void getUserInfo_Success() { |
Sure233 | 8188c5d | 2025-05-28 11:43:06 +0800 | [diff] [blame] | 34 | // 准备测试数据 |
Sure233 | 8188c5d | 2025-05-28 11:43:06 +0800 | [diff] [blame] | 35 | Map<String, Object> expectedResponse = new HashMap<>(); |
| 36 | expectedResponse.put("success", true); |
21301050 | e4db6a9 | 2025-06-08 23:42:43 +0800 | [diff] [blame] | 37 | expectedResponse.put("invites", 5); |
| 38 | expectedResponse.put("username", "testuser"); |
Sure233 | 8188c5d | 2025-05-28 11:43:06 +0800 | [diff] [blame] | 39 | |
21301050 | e4db6a9 | 2025-06-08 23:42:43 +0800 | [diff] [blame] | 40 | // 模拟服务层行为 |
| 41 | when(inviteService.getInvitesByUsername(anyString())) |
| 42 | .thenReturn(expectedResponse); |
Sure233 | 8188c5d | 2025-05-28 11:43:06 +0800 | [diff] [blame] | 43 | |
| 44 | // 执行测试 |
21301050 | e4db6a9 | 2025-06-08 23:42:43 +0800 | [diff] [blame] | 45 | Map<String, Object> actualResponse = invitesController.getUserInfo("testuser"); |
Sure233 | 8188c5d | 2025-05-28 11:43:06 +0800 | [diff] [blame] | 46 | |
| 47 | // 验证结果 |
| 48 | assertEquals(expectedResponse, actualResponse); |
21301050 | e4db6a9 | 2025-06-08 23:42:43 +0800 | [diff] [blame] | 49 | verify(inviteService, times(1)).getInvitesByUsername("testuser"); |
Sure233 | 8188c5d | 2025-05-28 11:43:06 +0800 | [diff] [blame] | 50 | } |
| 51 | |
| 52 | @Test |
21301050 | e4db6a9 | 2025-06-08 23:42:43 +0800 | [diff] [blame] | 53 | void getUserInfo_UserNotFound() { |
Sure233 | 8188c5d | 2025-05-28 11:43:06 +0800 | [diff] [blame] | 54 | Map<String, Object> expectedResponse = new HashMap<>(); |
| 55 | expectedResponse.put("success", false); |
21301050 | e4db6a9 | 2025-06-08 23:42:43 +0800 | [diff] [blame] | 56 | expectedResponse.put("message", "用户不存在"); |
Sure233 | 8188c5d | 2025-05-28 11:43:06 +0800 | [diff] [blame] | 57 | |
21301050 | e4db6a9 | 2025-06-08 23:42:43 +0800 | [diff] [blame] | 58 | when(inviteService.getInvitesByUsername(anyString())) |
| 59 | .thenReturn(expectedResponse); |
Sure233 | 8188c5d | 2025-05-28 11:43:06 +0800 | [diff] [blame] | 60 | |
21301050 | e4db6a9 | 2025-06-08 23:42:43 +0800 | [diff] [blame] | 61 | Map<String, Object> actualResponse = invitesController.getUserInfo("nonexistent"); |
Sure233 | 8188c5d | 2025-05-28 11:43:06 +0800 | [diff] [blame] | 62 | |
Sure233 | 8188c5d | 2025-05-28 11:43:06 +0800 | [diff] [blame] | 63 | assertEquals(expectedResponse, actualResponse); |
| 64 | assertFalse((Boolean) actualResponse.get("success")); |
Sure233 | 8188c5d | 2025-05-28 11:43:06 +0800 | [diff] [blame] | 65 | } |
| 66 | |
| 67 | @Test |
21301050 | e4db6a9 | 2025-06-08 23:42:43 +0800 | [diff] [blame] | 68 | void getUserInfo_EmptyUsername() { |
Sure233 | 8188c5d | 2025-05-28 11:43:06 +0800 | [diff] [blame] | 69 | Map<String, Object> expectedResponse = new HashMap<>(); |
| 70 | expectedResponse.put("success", false); |
21301050 | e4db6a9 | 2025-06-08 23:42:43 +0800 | [diff] [blame] | 71 | expectedResponse.put("message", "用户名不能为空"); |
Sure233 | 8188c5d | 2025-05-28 11:43:06 +0800 | [diff] [blame] | 72 | |
21301050 | e4db6a9 | 2025-06-08 23:42:43 +0800 | [diff] [blame] | 73 | when(inviteService.getInvitesByUsername("")) |
| 74 | .thenReturn(expectedResponse); |
Sure233 | 8188c5d | 2025-05-28 11:43:06 +0800 | [diff] [blame] | 75 | |
21301050 | e4db6a9 | 2025-06-08 23:42:43 +0800 | [diff] [blame] | 76 | Map<String, Object> actualResponse = invitesController.getUserInfo(""); |
Sure233 | 8188c5d | 2025-05-28 11:43:06 +0800 | [diff] [blame] | 77 | |
Sure233 | 8188c5d | 2025-05-28 11:43:06 +0800 | [diff] [blame] | 78 | assertEquals(expectedResponse, actualResponse); |
21301050 | e4db6a9 | 2025-06-08 23:42:43 +0800 | [diff] [blame] | 79 | assertEquals("用户名不能为空", actualResponse.get("message")); |
| 80 | } |
| 81 | |
| 82 | @Test |
| 83 | void getUserInfo_ServiceException() { |
| 84 | when(inviteService.getInvitesByUsername(anyString())) |
| 85 | .thenThrow(new RuntimeException("数据库连接失败")); |
| 86 | |
| 87 | assertThrows(RuntimeException.class, () -> { |
| 88 | invitesController.getUserInfo("testuser"); |
| 89 | }); |
| 90 | } |
| 91 | |
| 92 | // 边界条件测试 |
| 93 | @Test |
| 94 | void getUserInfo_LongUsername() { |
| 95 | String longUsername = "a".repeat(256); |
| 96 | Map<String, Object> expectedResponse = new HashMap<>(); |
| 97 | expectedResponse.put("success", false); |
| 98 | expectedResponse.put("message", "用户名过长"); |
| 99 | |
| 100 | when(inviteService.getInvitesByUsername(longUsername)) |
| 101 | .thenReturn(expectedResponse); |
| 102 | |
| 103 | Map<String, Object> actualResponse = invitesController.getUserInfo(longUsername); |
| 104 | |
| 105 | assertEquals(expectedResponse, actualResponse); |
| 106 | } |
| 107 | |
| 108 | // 性能测试示例(实际项目中可能需要单独的测试类) |
| 109 | @Test |
| 110 | void getUserInfo_Performance() { |
| 111 | // 模拟快速响应 |
| 112 | when(inviteService.getInvitesByUsername(anyString())) |
| 113 | .thenAnswer(invocation -> { |
| 114 | Map<String, Object> response = new HashMap<>(); |
| 115 | response.put("success", true); |
| 116 | return response; |
| 117 | }); |
| 118 | |
| 119 | long startTime = System.currentTimeMillis(); |
| 120 | invitesController.getUserInfo("testuser"); |
| 121 | long duration = System.currentTimeMillis() - startTime; |
| 122 | |
| 123 | assertTrue(duration < 100, "响应时间应小于100毫秒"); |
Sure233 | 8188c5d | 2025-05-28 11:43:06 +0800 | [diff] [blame] | 124 | } |
| 125 | } |