diff --git a/ruoyi-admin/src/test/java/com/ruoyi/web/controller/BT/TorrentControllerTest.java b/ruoyi-admin/src/test/java/com/ruoyi/web/controller/BT/TorrentControllerTest.java
new file mode 100644
index 0000000..54ea48e
--- /dev/null
+++ b/ruoyi-admin/src/test/java/com/ruoyi/web/controller/BT/TorrentControllerTest.java
@@ -0,0 +1,176 @@
+package com.ruoyi.web.controller.BT;
+
+import com.github.pagehelper.PageInfo;
+import com.ruoyi.common.core.domain.entity.SysUser;
+
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.web.Server.BT.TorrentCommentService;
+import com.ruoyi.web.Server.BT.TorrentService;
+import com.ruoyi.web.Server.BT.TrackerURLService;
+import com.ruoyi.web.Server.sys.UserCredentialService;
+import com.ruoyi.web.Server.sys.UserService;
+import com.ruoyi.web.controller.common.base.ResPage;
+import com.ruoyi.web.dao.BT.SuggestDao;
+import com.ruoyi.web.dao.BT.TagDao;
+import com.ruoyi.web.dao.BT.TorrentDao;
+import com.ruoyi.web.domain.BT.*;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.multipart;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
+
+import com.ruoyi.web.controller.common.base.PageUtil;
+
+
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
+
+@ExtendWith(MockitoExtension.class) // 使用 Mockito 扩展
+class TorrentControllerTest {
+
+    @Mock // 模拟依赖的 DAO
+    private TagDao tagDao;
+    @Mock // 模拟依赖的 DAO
+    private TorrentDao torrentDao;
+
+    @Mock // 模拟依赖的 Service
+    private SuggestDao suggestDao;
+
+    @Mock
+    private TorrentService torrentService;
+
+    @Mock
+    private TorrentCommentService torrentCommentService;
+
+    @Mock
+    private UserService userService;
+
+    @Mock
+    private TrackerURLService trackerURLService;
+
+    @Mock
+    private UserCredentialService userCredentialService;
+
+    @Mock
+    private PageUtil pageUtil;
+
+    @InjectMocks // 注入被测试的 Controller
+    private TorrentController torrentController;
+
+    private MockMvc mockMvc;
+    private ObjectMapper objectMapper;
+
+    @BeforeEach
+    void setUp() {
+
+        // 创建 LoginUser 实例时使用 int 类型的 userId 和 deptId
+        LoginUser loginUser = new LoginUser(
+                1,
+                1,
+                new SysUser(),
+                new HashSet<>()
+        );
+
+        mockMvc = MockMvcBuilders.standaloneSetup(torrentController).build();
+        objectMapper = new ObjectMapper();
+    }
+
+
+    @Test
+    void testSuggestWithoutKeyword() throws Exception {
+        // 执行请求（q参数为空）
+        mockMvc.perform(get("/torrent/suggest"))
+                .andExpect(status().isOk())
+                .andExpect(jsonPath("$.data").isArray())
+                .andExpect(jsonPath("$.data").isEmpty());
+    }
+
+    @Test
+    void testAudit() throws Exception {
+        TorrentAuditParam param = new TorrentAuditParam();
+        param.setId(1);
+        param.setStatus(1);
+        mockMvc.perform(post("/torrent/audit")
+                        .contentType(MediaType.APPLICATION_JSON)
+                        .content(objectMapper.writeValueAsString(param)))
+                .andExpect(status().isOk());
+        verify(torrentService, times(1)).audit(param);
+    }
+
+
+    @Test
+    void testCreateCredential() throws Exception {
+        mockMvc.perform(post("/torrent/create_credential"))
+                .andExpect(status().isOk());
+        verify(torrentService, times(1)).createCredential(Math.toIntExact(0)); // 假设用户ID为1
+    }
+
+    @Test
+    void testUpdate() throws Exception {
+        TorrentEntity entity = new TorrentEntity();
+        entity.setId(1);
+        entity.setTitle("Updated");
+        entity.setStatus(1);
+        mockMvc.perform(post("/torrent/update")
+                        .contentType(MediaType.APPLICATION_JSON)
+                        .content(objectMapper.writeValueAsString(entity)))
+                .andExpect(status().isOk());
+        verify(torrentService, times(1)).update(entity);
+    }
+
+    @Test
+    void testDelete() throws Exception {
+        mockMvc.perform(post("/torrent/delete")
+                        .contentType(MediaType.APPLICATION_JSON)
+                        .content(objectMapper.writeValueAsString(new Integer[]{1, 2})))
+                .andExpect(status().isOk());
+        verify(torrentService, times(1)).remove(any(Integer[].class));
+    }
+
+    @Test
+    void testTracker() throws Exception {
+        when(trackerURLService.getAnnounce(anyString())).thenReturn("http://tracker.test/announce");
+        when(userService.getPasskey(Math.toIntExact(0))).thenReturn("test-passkey");
+
+        mockMvc.perform(post("/torrent/tracker"))
+                .andExpect(jsonPath("$.data").value("http://tracker.test/announce"));
+    }
+
+    @Test
+    void testDownload() throws Exception {
+        TorrentEntity entity = new TorrentEntity();
+        entity.setId(1);
+        entity.setFilename("test.torrent");
+        when(torrentService.getById(1)).thenReturn(entity);
+        when(torrentService.fetch(1, null)).thenReturn("torrent-bytes".getBytes());
+
+        mockMvc.perform(get("/torrent/download")
+                        .param("id", "1"))
+                .andExpect(status().isOk());
+        verify(torrentService, times(1)).incrementLeechers(1);
+    }
+
+}
\ No newline at end of file
diff --git a/ruoyi-admin/src/test/java/com/ruoyi/web/controller/bounty/BountyControllerTest.java b/ruoyi-admin/src/test/java/com/ruoyi/web/controller/bounty/BountyControllerTest.java
index 121d59e..04c4b19 100644
--- a/ruoyi-admin/src/test/java/com/ruoyi/web/controller/bounty/BountyControllerTest.java
+++ b/ruoyi-admin/src/test/java/com/ruoyi/web/controller/bounty/BountyControllerTest.java
@@ -14,6 +14,8 @@
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
 import org.springframework.http.MediaType;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.context.SecurityContextHolder;
@@ -28,7 +30,6 @@
 import static org.mockito.Mockito.*;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
-
 @ExtendWith(MockitoExtension.class)
 class BountyControllerTest {
 
@@ -43,17 +44,7 @@
 
     @BeforeEach
     void setUp() {
-        // 创建模拟的安全上下文
-        SysUser sysUser = new SysUser();
-        sysUser.setUserId(1L);
-        sysUser.setUserName("testUser");
-
-        LoginUser loginUser = new LoginUser(1L, 1L, sysUser, new HashSet<>());
-
-        UsernamePasswordAuthenticationToken authToken =
-                new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities());
-        SecurityContextHolder.getContext().setAuthentication(authToken);
-
+        // 移除手动创建的SecurityContext，使用Spring Security测试支持
         mockMvc = MockMvcBuilders.standaloneSetup(bountyController).build();
         objectMapper = new ObjectMapper();
     }
diff --git a/ruoyi-admin/src/test/java/com/ruoyi/web/controller/bounty/BountySubmissionControllerTest.java b/ruoyi-admin/src/test/java/com/ruoyi/web/controller/bounty/BountySubmissionControllerTest.java
index b7f7f99..49b4034 100644
--- a/ruoyi-admin/src/test/java/com/ruoyi/web/controller/bounty/BountySubmissionControllerTest.java
+++ b/ruoyi-admin/src/test/java/com/ruoyi/web/controller/bounty/BountySubmissionControllerTest.java
@@ -18,6 +18,7 @@
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
 import org.springframework.mock.web.MockMultipartFile;
diff --git a/ruoyi-admin/src/test/java/com/ruoyi/web/controller/post/PostCenterControllerTest.java b/ruoyi-admin/src/test/java/com/ruoyi/web/controller/post/PostCenterControllerTest.java
index ba1400d..e83c2a5 100644
--- a/ruoyi-admin/src/test/java/com/ruoyi/web/controller/post/PostCenterControllerTest.java
+++ b/ruoyi-admin/src/test/java/com/ruoyi/web/controller/post/PostCenterControllerTest.java
@@ -14,6 +14,7 @@
 import org.mockito.Mock;
 import org.mockito.MockedStatic;
 import org.mockito.junit.jupiter.MockitoExtension;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
 import org.springframework.http.MediaType;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.context.SecurityContextHolder;
@@ -30,7 +31,8 @@
 import static org.mockito.Mockito.*;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
-
+import org.springframework.boot.test.context.SpringBootTestContextBootstrapper;
+import org.springframework.test.context.BootstrapWith;
 /**
  * PostCenterController 单元测试
  * 
diff --git a/ruoyi-admin/src/test/java/com/ruoyi/web/controller/post/PostCommentControllerTest.java b/ruoyi-admin/src/test/java/com/ruoyi/web/controller/post/PostCommentControllerTest.java
index 8e81d5a..2833c1e 100644
--- a/ruoyi-admin/src/test/java/com/ruoyi/web/controller/post/PostCommentControllerTest.java
+++ b/ruoyi-admin/src/test/java/com/ruoyi/web/controller/post/PostCommentControllerTest.java
@@ -13,6 +13,7 @@
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
 import org.springframework.http.MediaType;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.context.SecurityContextHolder;
@@ -27,7 +28,8 @@
 import static org.mockito.Mockito.*;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
-
+import org.springframework.boot.test.context.SpringBootTestContextBootstrapper;
+import org.springframework.test.context.BootstrapWith;
 /**
  * PostCommentController 单元测试
  * 
diff --git a/ruoyi-admin/src/test/java/com/ruoyi/web/controller/post/PostControllerTest.java b/ruoyi-admin/src/test/java/com/ruoyi/web/controller/post/PostControllerTest.java
index 34b2992..c076265 100644
--- a/ruoyi-admin/src/test/java/com/ruoyi/web/controller/post/PostControllerTest.java
+++ b/ruoyi-admin/src/test/java/com/ruoyi/web/controller/post/PostControllerTest.java
@@ -20,6 +20,7 @@
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
 import org.springframework.http.MediaType;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.context.SecurityContextHolder;
@@ -34,7 +35,8 @@
 import static org.mockito.Mockito.*;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
-
+import org.springframework.boot.test.context.SpringBootTestContextBootstrapper;
+import org.springframework.test.context.BootstrapWith;
 /**
  * PostController 单元测试
  * 
diff --git a/ruoyi-admin/src/test/java/com/ruoyi/web/controller/post/PostTagControllerTest.java b/ruoyi-admin/src/test/java/com/ruoyi/web/controller/post/PostTagControllerTest.java
index a2f3fbb..8107f84 100644
--- a/ruoyi-admin/src/test/java/com/ruoyi/web/controller/post/PostTagControllerTest.java
+++ b/ruoyi-admin/src/test/java/com/ruoyi/web/controller/post/PostTagControllerTest.java
@@ -12,6 +12,7 @@
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
 import org.springframework.http.MediaType;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.context.SecurityContextHolder;
@@ -27,7 +28,8 @@
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
 import static org.mockito.Mockito.lenient;
-
+import org.springframework.boot.test.context.SpringBootTestContextBootstrapper;
+import org.springframework.test.context.BootstrapWith;
 /**
  * PostTagController 单元测试
  * 
diff --git a/ruoyi-admin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/ruoyi-admin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000..4d8fe83
--- /dev/null
+++ b/ruoyi-admin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+org.mockito.internal.creation.bytebuddy.SubclassByteBuddyMockMaker
\ No newline at end of file
