diff --git a/src/test/java/com/g9/g9backend/controller/ResourceControllerTest.java b/src/test/java/com/g9/g9backend/controller/ResourceControllerTest.java
index 9d7c908..61b73d8 100644
--- a/src/test/java/com/g9/g9backend/controller/ResourceControllerTest.java
+++ b/src/test/java/com/g9/g9backend/controller/ResourceControllerTest.java
@@ -1,5 +1,7 @@
 package com.g9.g9backend.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.g9.g9backend.pojo.*;
 import com.g9.g9backend.pojo.DTO.*;
@@ -13,7 +15,9 @@
 import org.springframework.test.web.servlet.MockMvc;
 import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.when;
@@ -66,6 +70,21 @@
     @Mock
     private NotificationService notificationService;
 
+    @Mock
+    private ResourceVersionService resourceVersionService;
+
+    @Mock
+    private SearchHistoryService searchHistoryService;
+
+    @Mock
+    private GameVersionService gameVersionService;
+
+    @Mock
+    private TorrentRecordService torrentRecordService;
+
+    @Mock
+    private HotTrendService hotTrendService;
+
     // ObjectMapper对象用于将 Java 对象和 JSON 字符串互相转换 ，因为在测试中，需要把请求参数或返回响应转换成 JSON 字符串形式来传输
     private final ObjectMapper objectMapper = new ObjectMapper();
 
@@ -115,6 +134,23 @@
                 .andExpect(status().isOk()); // 期望接口返回 HTTP 状态码 200（成功）
     }
 
+    // 上传版本
+    @Test
+    public void testUploadResourceVersion() throws Exception {
+
+        ResourceVersion resourceVersion = new ResourceVersion();
+        resourceVersion.setResourceId(1);
+        resourceVersion.setResourceVersionName("Test ResourceVersion");
+
+        when(resourceVersionService.save(any())).thenReturn(true);
+
+        // 模拟 HTTP 请求
+        mockMvc.perform(post("/resource/version")
+                        .contentType(MediaType.APPLICATION_JSON)
+                        .content(objectMapper.writeValueAsString(resourceVersion)))
+                .andExpect(status().isOk());
+    }
+
     // 购买资源
     @Test
     public void testPurchaseResource_success() throws Exception {
@@ -253,4 +289,136 @@
                         .param("resourceId", "1"))
                 .andExpect(status().isNoContent());
     }
+
+    // 搜索资源
+    @Test
+    public void testGetResourceSearch() throws Exception {
+
+        when(searchHistoryService.save(any())).thenReturn(true);
+        when(resourceService.page(any(), any())).thenReturn(new Page<>(1, 1));
+
+        List<Gameplay> gameplayList = new ArrayList<>();
+        QueryWrapper<Gameplay> gameplayQuery = new QueryWrapper<>();
+        gameplayQuery.eq("resource_id", 1);
+        when(gameplayService.list(gameplayQuery)).thenReturn(gameplayList);
+
+        mockMvc.perform(get("/resource/search")
+                        .param("userId", "1")
+                        .param("searchValue", "")
+                        .param("classify", "")
+                        .param("gameplayList", "")
+                        .param("gameVersionList", "")
+                        .param("pageNumber", "1")
+                        .param("rows", "1"))
+                .andExpect(status().isOk());
+    }
+
+    // 获取资源信息
+    @Test
+    public void testGetResourceInfo() throws Exception {
+
+        when(resourceService.getById(any())).thenReturn(new Resource());
+        when(gameplayService.list(new QueryWrapper<Gameplay>().eq("resource_id", 1))).thenReturn(new ArrayList<>());
+        when(resourceVersionService.list(new QueryWrapper<ResourceVersion>().eq("resource_id", 1))).thenReturn(new ArrayList<>());
+        when(gameVersionService.list(new QueryWrapper<GameVersion>().eq("resource_version_id", 1))).thenReturn(new ArrayList<>());
+        when(torrentRecordService.list(new QueryWrapper<TorrentRecord>().eq("resource_version_id", 1))).thenReturn(new ArrayList<>());
+        when(userCollectionService.getOne(any())).thenReturn(new UserCollection());
+        when(userLikeService.getOne(any())).thenReturn(new UserLike());
+        when(userPurchaseService.getOne(any())).thenReturn(new UserPurchase());
+        when(userUploadService.getOne(any())).thenReturn(new UserUpload());
+
+        mockMvc.perform(get("/resource/info")
+                        .param("resourceId", "1")
+                        .param("userId", "1"))
+                .andExpect(status().isOk());
+    }
+
+    // 获取热门资源
+    @Test
+    public void testGetHotResource() throws Exception {
+
+        when(resourceService.page(any(), any())).thenReturn(new Page<>(1, 1));
+
+        List<Gameplay> gameplayList = new ArrayList<>();
+        QueryWrapper<Gameplay> gameplayQuery = new QueryWrapper<>();
+        gameplayQuery.eq("resource_id", 1);
+        when(gameplayService.list(gameplayQuery)).thenReturn(gameplayList);
+
+        mockMvc.perform(get("/resource/hot")
+                        .param("classify", "map")
+                        .param("pageNumber", "1")
+                        .param("rows", "1"))
+                .andExpect(status().isOk());
+    }
+
+    // 获取热门资源幻灯片数据
+    @Test
+    public void testGetHotSlideResource() throws Exception {
+
+        List<Resource> resourceList = new ArrayList<>();
+        QueryWrapper<Resource> resourceQuery = new QueryWrapper<>();
+        resourceQuery.orderByDesc("(downloads * 0.25 + likes * 0.25 + collections * 0.25 + comments * 0.25)");
+        resourceQuery.last("LIMIT 3");
+        when(resourceService.list(resourceQuery)).thenReturn(resourceList);
+
+        mockMvc.perform(get("/resource/hot/slide"))
+                .andExpect(status().isOk());
+    }
+
+    // 获取热门资源趋势图
+    @Test
+    public void testGetResourceHotTrend() throws Exception {
+
+        List<HotTrend> hotTrendList = new ArrayList<>();
+        when(hotTrendService.list()).thenReturn(hotTrendList);
+
+        mockMvc.perform(get("/resource/hot-trend"))
+                .andExpect(status().isOk());
+    }
+
+    // 修改资源信息
+    @Test
+    public void testPutResourceInfo_success() throws Exception {
+
+        PutResourceInfoDTO putResourceInfoDTO = new PutResourceInfoDTO();
+        putResourceInfoDTO.setResourceId(1);
+        putResourceInfoDTO.setResourceName("test");
+        putResourceInfoDTO.setResourcePicture("test");
+        putResourceInfoDTO.setResourceSummary("test");
+        putResourceInfoDTO.setResourceDetail("test");
+        putResourceInfoDTO.setPrice(100);
+        String[] gameplayList = {"test1",  "test2"};
+        putResourceInfoDTO.setGameplayList(gameplayList);
+
+        when(resourceService.getOne(any())).thenReturn(null);
+        when(resourceService.update(any())).thenReturn(true);
+        when(gameplayService.remove(any())).thenReturn(true);
+        when(gameplayService.save(any())).thenReturn(true);
+
+        mockMvc.perform(put("/resource/info")
+                        .contentType(MediaType.APPLICATION_JSON)
+                        .content(objectMapper.writeValueAsString(putResourceInfoDTO)))
+                .andExpect(status().isOk());
+    }
+
+    @Test
+    public void testPutResourceInfo__resourceNameExists() throws Exception {
+
+        PutResourceInfoDTO putResourceInfoDTO = new PutResourceInfoDTO();
+        putResourceInfoDTO.setResourceId(1);
+        putResourceInfoDTO.setResourceName("test");
+        putResourceInfoDTO.setResourcePicture("test");
+        putResourceInfoDTO.setResourceSummary("test");
+        putResourceInfoDTO.setResourceDetail("test");
+        putResourceInfoDTO.setPrice(100);
+        String[] gameplayList = {"test1",  "test2"};
+        putResourceInfoDTO.setGameplayList(gameplayList);
+
+        when(resourceService.getOne(any())).thenReturn(new Resource());
+
+        mockMvc.perform(put("/resource/info")
+                        .contentType(MediaType.APPLICATION_JSON)
+                        .content(objectMapper.writeValueAsString(putResourceInfoDTO)))
+                .andExpect(status().is(411));
+    }
 }
\ No newline at end of file
diff --git a/src/test/java/com/g9/g9backend/controller/UserControllerTest.java b/src/test/java/com/g9/g9backend/controller/UserControllerTest.java
index d390dea..76db7ee 100644
--- a/src/test/java/com/g9/g9backend/controller/UserControllerTest.java
+++ b/src/test/java/com/g9/g9backend/controller/UserControllerTest.java
@@ -58,6 +58,9 @@
     @Mock
     private ResourceService resourceService;
 
+    @Mock
+    private ThreadService threadService;
+
     private final ObjectMapper objectMapper = new ObjectMapper();
 
     @BeforeEach
@@ -303,7 +306,7 @@
     public void testGetUserCollection() throws Exception {
 
         when(userCollectionService.page(any(), any())).thenReturn(new Page<>(1, 2));
-        when(resourceService.getById(anyInt())).thenReturn(new Resource(1, "a", null, null, null, new Date(), new Date(), 100, 0, 0, 0, 0, 0, "mod"));
+        when(resourceService.getById(anyInt())).thenReturn(new Resource(1, "a", null, null, null, new Date(), new Date(), 100, 0, 0, 0, 0,  "mod"));
 
         mockMvc.perform(get("/user/collection")
                         .param("userId", "1")
@@ -317,7 +320,7 @@
     public void testGetUserUpload() throws Exception {
 
         when(userUploadService.page(any(), any())).thenReturn(new Page<>(1, 2));
-        when(resourceService.getById(anyInt())).thenReturn(new Resource(1, "a", null, null, null, new Date(), new Date(), 100, 0, 0, 0, 0, 0, "mod"));
+        when(resourceService.getById(anyInt())).thenReturn(new Resource(1, "a", null, null, null, new Date(), new Date(), 100, 0, 0, 0, 0,  "mod"));
 
         mockMvc.perform(get("/user/upload")
                         .param("userId", "1")
@@ -331,7 +334,7 @@
     public void testGetUserPurchase() throws Exception {
 
         when(userPurchaseService.page(any(), any())).thenReturn(new Page<>(1, 2));
-        when(resourceService.getById(anyInt())).thenReturn(new Resource(1, "a", null, null, null, new Date(), new Date(), 100, 0, 0, 0, 0, 0, "mod"));
+        when(resourceService.getById(anyInt())).thenReturn(new Resource(1, "a", null, null, null, new Date(), new Date(), 100, 0, 0, 0, 0,  "mod"));
 
         mockMvc.perform(get("/user/purchase")
                         .param("userId", "1")
@@ -356,6 +359,19 @@
                 .andExpect(status().isOk());
     }
 
+    // 获取发布过的贴子
+    @Test
+    public void testGetUserThread() throws Exception {
+
+        when(threadService.page(any(), any())).thenReturn(new Page<>(1, 2));
+
+        mockMvc.perform(get("/user/thread")
+                        .param("userId", "1")
+                        .param("pageNumber", "1")
+                        .param("rows", "2"))
+                .andExpect(status().isOk());
+    }
+
     // 获取用户数据
     @Test
     public void testGetUserData() throws Exception {
