diff --git a/src/main/java/com/ptp/ptplatform/controller/HelpCommentController.java b/src/main/java/com/ptp/ptplatform/controller/HelpCommentController.java
index c937428..6ee5d81 100644
--- a/src/main/java/com/ptp/ptplatform/controller/HelpCommentController.java
+++ b/src/main/java/com/ptp/ptplatform/controller/HelpCommentController.java
@@ -1,13 +1,19 @@
 package com.ptp.ptplatform.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ptp.ptplatform.entity.HelpComment;
 import com.ptp.ptplatform.service.HelpCommentService;
 import com.ptp.ptplatform.utils.Result;
 import lombok.AllArgsConstructor;
+import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.File;
+import java.io.IOException;
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.UUID;
 
 @RestController
 @RequestMapping("/help/comments")
@@ -28,29 +34,65 @@
         return Result.ok().data("replies", replies);
     }
 
-    @PostMapping("/{commentId}/replies")
+    @PostMapping(value = "/{commentId}/replies", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
     public Result addReply(@PathVariable int commentId,
-                           @RequestBody HelpComment reply) {
+                           @RequestParam("authorId") String authorId,
+                           @RequestParam("content") String content,
+                           @RequestParam(value = "image", required = false) MultipartFile image) {
+        // 校验父评论是否存在
         HelpComment parentComment = commentService.getById(commentId);
         if (parentComment == null) {
             return Result.error(404).setMessage("被回复的评论不存在");
         }
 
-        // 设置完整字段
+        // 构造回复评论对象
+        HelpComment reply = new HelpComment();
         reply.setPostId(parentComment.getPostId());
         reply.setParentId(commentId);
-        reply.setAuthorId(reply.getAuthorId());
+        reply.setAuthorId(authorId);              // String 类型
         reply.setReplyTo(parentComment.getAuthorId());
-        reply.setCreateTime(LocalDateTime.now()); // 设置创建时间
-        reply.setLikeCount(0); // 初始化点赞数
+        reply.setContent(content);
+        reply.setCreateTime(LocalDateTime.now());
+        reply.setLikeCount(0);
 
+        // 可选：处理图片上传
+        if (image != null && !image.isEmpty()) {
+            try {
+                String fileExt = image.getOriginalFilename()
+                        .substring(image.getOriginalFilename().lastIndexOf('.') + 1);
+                String fileName = UUID.randomUUID() + "." + fileExt;
+
+                String uploadDir = System.getProperty("user.dir") + File.separator + "uploads";
+                File dir = new File(uploadDir);
+                if (!dir.exists()) dir.mkdirs();
+
+                File dest = new File(dir, fileName);
+                image.transferTo(dest);
+
+                // 保存相对访问路径
+                reply.setImageUrl("/uploads/" + fileName);
+            } catch (IOException e) {
+                return Result.error(404).setMessage("图片上传失败：" + e.getMessage());
+            }
+        }
+
+        // 保存到数据库
         commentService.save(reply);
 
-        // 返回完整的评论数据
+        // 返回新回复及其父评论 ID
         return Result.ok()
                 .data("reply", reply)
-                .data("parentCommentId", commentId); // 同时返回父评论ID
+                .data("parentCommentId", commentId);
     }
 
 
+        // 删除评论
+        @PostMapping("/delete/{commentId}")
+        public Result deletePost(@PathVariable int commentId) {
+            commentService.remove(new QueryWrapper<HelpComment>().eq("post_id", commentId));
+            boolean removed = commentService.removeById(commentId);
+            return removed ? Result.ok() : Result.error(404).setMessage("删除评论失败");
+        }
+
+
 }
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/controller/HelpPostController.java b/src/main/java/com/ptp/ptplatform/controller/HelpPostController.java
index 646ed76..a40efb7 100644
--- a/src/main/java/com/ptp/ptplatform/controller/HelpPostController.java
+++ b/src/main/java/com/ptp/ptplatform/controller/HelpPostController.java
@@ -7,15 +7,16 @@
 import com.ptp.ptplatform.service.HelpPostService;
 import com.ptp.ptplatform.utils.Result;
 import lombok.AllArgsConstructor;
+import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.File;
+import java.io.IOException;
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @RestController
 @RequestMapping("/help/posts")
@@ -92,30 +93,85 @@
         return Result.ok();
     }
 
-    @PostMapping("/{Id}/comments")
+//    @PostMapping("/{Id}/comments")
+//    public Result comment(@PathVariable int Id,
+//                          @RequestBody HelpComment comment) {
+//        // 设置评论信息
+//        comment.setPostId(Id);
+//        comment.setCreateTime(LocalDateTime.now());
+//        comment.setLikeCount(0); // 初始化点赞数
+//        comment.setParentId(0);  // 默认父评论ID
+//        comment.setReplyTo(null); // 主评论 replyTo=null
+//
+//        // 保存评论
+//        boolean saved = commentService.save(comment);
+//        if (!saved) {
+//            return Result.error(404).setMessage("评论保存失败");
+//        }
+//
+//        // 更新回复数
+//        postService.incrementReplyCount(Id);
+//
+//        // 获取更新后的完整评论（包含数据库生成的ID和时间）
+//        HelpComment newComment = commentService.getById(comment.getId());
+//
+//        return Result.ok()
+//                .data("comment", newComment)  // 返回完整评论数据
+//                .data("newReplyCount", postService.getById(Id).getReplyCount());
+//    }
+
+    @PostMapping(value = "/{Id}/comments", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
     public Result comment(@PathVariable int Id,
-                          @RequestBody HelpComment comment) {
-        // 设置评论信息
+                          @RequestParam("authorId") String authorId,
+                          @RequestParam("content") String content,
+                          @RequestParam(value = "image", required = false) MultipartFile image) {
+
+        HelpComment comment = new HelpComment();
         comment.setPostId(Id);
+        comment.setAuthorId(authorId); // 类型为 String
+        comment.setContent(content);
         comment.setCreateTime(LocalDateTime.now());
-        comment.setLikeCount(0); // 初始化点赞数
-        comment.setParentId(0);  // 默认父评论ID
-        comment.setReplyTo(null); // 主评论 replyTo=null
+        comment.setLikeCount(0);
+        comment.setParentId(0);
+        comment.setReplyTo(null);
+
+        if (image != null && !image.isEmpty()) {
+            try {
+                String fileExt = image.getOriginalFilename()
+                        .substring(image.getOriginalFilename().lastIndexOf(".") + 1);
+                String fileName = UUID.randomUUID() + "." + fileExt;
+
+                String uploadDir = System.getProperty("user.dir") + File.separator + "uploads";
+                File dir = new File(uploadDir);
+                if (!dir.exists()) dir.mkdirs();
+
+                File dest = new File(dir, fileName);
+                image.transferTo(dest);
+
+                comment.setImageUrl("/uploads/" + fileName);
+            } catch (IOException e) {
+                return Result.error(404).setMessage("图片上传失败：" + e.getMessage());
+            }
+        }
 
         // 保存评论
         boolean saved = commentService.save(comment);
-        if (!saved) {
-            return Result.error(404).setMessage("评论保存失败");
-        }
+        if (!saved) return Result.error(500).setMessage("评论保存失败");
 
-        // 更新回复数
         postService.incrementReplyCount(Id);
-
-        // 获取更新后的完整评论（包含数据库生成的ID和时间）
         HelpComment newComment = commentService.getById(comment.getId());
 
         return Result.ok()
-                .data("comment", newComment)  // 返回完整评论数据
+                .data("comment", newComment)
                 .data("newReplyCount", postService.getById(Id).getReplyCount());
     }
+
+    // 删除帖子
+    @PostMapping("/delete/{Id}")
+    public Result deletePost(@PathVariable int Id) {
+        commentService.remove(new QueryWrapper<HelpComment>().eq("post_id", Id));
+        boolean removed = postService.removeById(Id);
+        return removed ? Result.ok() : Result.error(404).setMessage("删除帖子失败");
+    }
+
 }
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/controller/TorrentCommentController.java b/src/main/java/com/ptp/ptplatform/controller/TorrentCommentController.java
index 1140ff7..4388eb5 100644
--- a/src/main/java/com/ptp/ptplatform/controller/TorrentCommentController.java
+++ b/src/main/java/com/ptp/ptplatform/controller/TorrentCommentController.java
@@ -1,5 +1,6 @@
 package com.ptp.ptplatform.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ptp.ptplatform.entity.TorrentComment;
 import com.ptp.ptplatform.service.TorrentCommentService;
 import com.ptp.ptplatform.utils.Result;
@@ -52,4 +53,12 @@
                 .data("parentCommentId", commentId); // 同时返回父评论ID
     }
 
+    // 删除评论
+    @PostMapping("/delete/{commentId}")
+    public Result deletePost(@PathVariable int commentId) {
+        commentService.remove(new QueryWrapper<TorrentComment>().eq("post_id", commentId));
+        boolean removed = commentService.removeById(commentId);
+        return removed ? Result.ok() : Result.error(404).setMessage("删除评论失败");
+    }
+
 }
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/controller/TorrentController.java b/src/main/java/com/ptp/ptplatform/controller/TorrentController.java
index 436ecdd..028f5c8 100644
--- a/src/main/java/com/ptp/ptplatform/controller/TorrentController.java
+++ b/src/main/java/com/ptp/ptplatform/controller/TorrentController.java
@@ -129,7 +129,7 @@
 
         return Result.ok()
                 .data("comment", newComment)  // 返回完整评论数据
-                .data("newReplyCount", postService.getById(Id).getReplay_count());
+                .data("newReplyCount", postService.getById(Id).getReply_count());
     }
 
     @PostConstruct //启动项目时候自动启动tracker服务器
diff --git a/src/main/java/com/ptp/ptplatform/entity/HelpComment.java b/src/main/java/com/ptp/ptplatform/entity/HelpComment.java
index 5821868..c067fe3 100644
--- a/src/main/java/com/ptp/ptplatform/entity/HelpComment.java
+++ b/src/main/java/com/ptp/ptplatform/entity/HelpComment.java
@@ -21,6 +21,7 @@
     private LocalDateTime createTime;
     private Integer parentId;  // 新增字段，用于回复功能，0表示主评论，非0表示回复某条评论
     private String replyTo;
+    private String ImageUrl;
 
     @TableField(exist = false)
     private List<HelpComment> replies = new ArrayList<>(); // 必须初始化
diff --git a/src/main/java/com/ptp/ptplatform/entity/TORRENT.java b/src/main/java/com/ptp/ptplatform/entity/TORRENT.java
index afbb264..c9d1c94 100644
--- a/src/main/java/com/ptp/ptplatform/entity/TORRENT.java
+++ b/src/main/java/com/ptp/ptplatform/entity/TORRENT.java
@@ -31,7 +31,7 @@
     private String username; // 创建用户
     private String filePath;
     private int like_count;
-    private int replay_count;
+    private int reply_count;
 
     @TableField(value = "create_time") // 使用@TableField注解处理时间字段
     private Date createTime; // 创建时间
@@ -49,7 +49,7 @@
         this.username = username;
         this.filePath = filePath;
         this.like_count = 0;
-        this.replay_count = 0;
+        this.reply_count = 0;
     }
 
     public void setLikeCount(int like_count) {
diff --git a/src/test/java/com/ptp/ptplatform/controller/HelpCommentControllerTest.java b/src/test/java/com/ptp/ptplatform/controller/HelpCommentControllerTest.java
index 2450c6e..f637e39 100644
--- a/src/test/java/com/ptp/ptplatform/controller/HelpCommentControllerTest.java
+++ b/src/test/java/com/ptp/ptplatform/controller/HelpCommentControllerTest.java
@@ -1,5 +1,6 @@
 package com.ptp.ptplatform.controller;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.ptp.ptplatform.entity.HelpComment;
 import com.ptp.ptplatform.service.HelpCommentService;
 import com.ptp.ptplatform.utils.Result;
@@ -8,13 +9,14 @@
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
-import org.springframework.http.ResponseEntity;
+import org.springframework.mock.web.MockMultipartFile;
 
 import java.time.LocalDateTime;
 import java.util.Arrays;
 import java.util.List;
 
 import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.*;
 
 class HelpCommentControllerTest {
@@ -32,14 +34,11 @@
 
     @Test
     void likeComment_ShouldReturnSuccess() {
-        // Arrange
         int commentId = 1;
         doNothing().when(commentService).incrementLike(commentId);
 
-        // Act
         Result result = commentController.like(commentId);
 
-        // Assert
         assertEquals(200, result.getCode());
         assertEquals("成功", result.getMessage());
         verify(commentService, times(1)).incrementLike(commentId);
@@ -47,89 +46,99 @@
 
     @Test
     void getReplies_ShouldReturnReplies() {
-        // Arrange
         int commentId = 1;
+        HelpComment r1 = new HelpComment();
+        r1.setId(2); r1.setPostId(1); r1.setParentId(commentId);
+        r1.setAuthorId("user2"); r1.setContent("Reply 1");
+        r1.setCreateTime(LocalDateTime.now()); r1.setLikeCount(0);
+        r1.setReplyTo("user1");
 
-        HelpComment reply1 = new HelpComment();
-        reply1.setId(2);
-        reply1.setPostId(1);
-        reply1.setParentId(commentId);
-        reply1.setAuthorId("user2");
-        reply1.setContent("Reply 1");
-        reply1.setCreateTime(LocalDateTime.now());
-        reply1.setLikeCount(0);
-        reply1.setReplyTo("user1");
+        HelpComment r2 = new HelpComment();
+        r2.setId(3); r2.setPostId(1); r2.setParentId(commentId);
+        r2.setAuthorId("user3"); r2.setContent("Reply 2");
+        r2.setCreateTime(LocalDateTime.now()); r2.setLikeCount(0);
+        r2.setReplyTo("user1");
 
-        HelpComment reply2 = new HelpComment();
-        reply2.setId(3);
-        reply2.setPostId(1);
-        reply2.setParentId(commentId);
-        reply2.setAuthorId("user3");
-        reply2.setContent("Reply 2");
-        reply2.setCreateTime(LocalDateTime.now());
-        reply2.setLikeCount(0);
-        reply2.setReplyTo("user1");
-
-        List<HelpComment> mockReplies = Arrays.asList(reply1, reply2);
+        List<HelpComment> mockReplies = Arrays.asList(r1, r2);
         when(commentService.getReplies(commentId)).thenReturn(mockReplies);
 
-        // Act
         Result result = commentController.getReplies(commentId);
 
-        // Assert
         assertEquals(200, result.getCode());
-        assertEquals(mockReplies, result.getData().get("replies"));
+        @SuppressWarnings("unchecked")
+        List<HelpComment> ret = (List<HelpComment>) result.getData().get("replies");
+        assertEquals(mockReplies, ret);
         verify(commentService, times(1)).getReplies(commentId);
     }
 
     @Test
-    void addReply_ShouldReturnSuccess_WhenParentCommentExists() {
-        // Arrange
-        int commentId = 1;
+    void addReplyWithoutImage_ShouldReturnSuccess() {
+        int commentId = 5;
+        String authorId = "userX";
+        String content = "no image reply";
 
-        HelpComment parentComment = new HelpComment();
-        parentComment.setId(commentId);
-        parentComment.setPostId(1);
-        parentComment.setParentId(0);
-        parentComment.setAuthorId("user1");
-        parentComment.setContent("Parent comment");
-        parentComment.setCreateTime(LocalDateTime.now());
-        parentComment.setLikeCount(5);
-        parentComment.setReplyTo(null);
+        HelpComment parent = new HelpComment();
+        parent.setId(commentId);
+        parent.setAuthorId("userParent");
+        parent.setPostId(10);
+        when(commentService.getById(commentId)).thenReturn(parent);
 
-        HelpComment reply = new HelpComment();
-        reply.setAuthorId("user2");
-        reply.setContent("Test reply");
-
-        when(commentService.getById(commentId)).thenReturn(parentComment);
         when(commentService.save(any(HelpComment.class))).thenReturn(true);
 
-        // Act
-        Result result = commentController.addReply(commentId, reply);
+        Result result = commentController.addReply(commentId, authorId, content, null);
 
-        // Assert
         assertEquals(200, result.getCode());
-        assertNotNull(result.getData().get("reply"));
+        HelpComment reply = (HelpComment) result.getData().get("reply");
+        assertNotNull(reply);
+        assertEquals(authorId, reply.getAuthorId());
+        assertEquals(content, reply.getContent());
+        assertNull(reply.getImageUrl());
         assertEquals(commentId, result.getData().get("parentCommentId"));
         verify(commentService, times(1)).save(any(HelpComment.class));
     }
 
     @Test
-    void addReply_ShouldReturnError_WhenParentCommentNotExists() {
-        // Arrange
-        int commentId = 1;
-        HelpComment reply = new HelpComment();
-        reply.setAuthorId("user2");
-        reply.setContent("Test reply");
+    void addReplyWithImage_ShouldReturnSuccess() {
+        int commentId = 8;
+        String authorId = "userY";
+        String content = "with image reply";
 
+        HelpComment parent = new HelpComment();
+        parent.setId(commentId);
+        parent.setAuthorId("userParent");
+        parent.setPostId(20);
+        when(commentService.getById(commentId)).thenReturn(parent);
+
+        byte[] data = {0x1, 0x2};
+        MockMultipartFile image = new MockMultipartFile(
+                "image", "test.png", "image/png", data
+        );
+
+        when(commentService.save(any(HelpComment.class))).thenReturn(true);
+
+        Result result = commentController.addReply(commentId, authorId, content, image);
+
+        assertEquals(200, result.getCode());
+        HelpComment reply = (HelpComment) result.getData().get("reply");
+        assertNotNull(reply);
+        assertEquals(authorId, reply.getAuthorId());
+        assertEquals(content, reply.getContent());
+        assertNotNull(reply.getImageUrl());
+        assertTrue(reply.getImageUrl().startsWith("/uploads/"));
+        assertEquals(commentId, result.getData().get("parentCommentId"));
+        verify(commentService, times(1)).save(any(HelpComment.class));
+    }
+
+    @Test
+    void addReply_ShouldReturnError_WhenParentNotExist() {
+        int commentId = 99;
         when(commentService.getById(commentId)).thenReturn(null);
 
-        // Act
-        Result result = commentController.addReply(commentId, reply);
+        Result result = commentController.addReply(commentId, "any", "content", null);
 
-        // Assert
         assertEquals(500, result.getCode());
         assertEquals("被回复的评论不存在", result.getMessage());
-        verify(commentService, never()).save(any(HelpComment.class));
+        verify(commentService, never()).save(any());
     }
-}
\ No newline at end of file
+
+}
diff --git a/src/test/java/com/ptp/ptplatform/controller/HelpPostControllerTest.java b/src/test/java/com/ptp/ptplatform/controller/HelpPostControllerTest.java
index 877289b..0098abb 100644
--- a/src/test/java/com/ptp/ptplatform/controller/HelpPostControllerTest.java
+++ b/src/test/java/com/ptp/ptplatform/controller/HelpPostControllerTest.java
@@ -1,7 +1,6 @@
 package com.ptp.ptplatform.controller;
 
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ptp.ptplatform.entity.HelpComment;
 import com.ptp.ptplatform.entity.HelpPost;
@@ -10,9 +9,12 @@
 import com.ptp.ptplatform.utils.Result;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.mockito.ArgumentCaptor;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.time.LocalDateTime;
 import java.util.Arrays;
@@ -20,6 +22,7 @@
 
 import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.*;
 
 class HelpPostControllerTest {
@@ -40,9 +43,7 @@
 
     @Test
     void getPost_ShouldReturnPostWithComments_WhenPostExists() {
-        // Arrange
         int postId = 1;
-
         HelpPost post = new HelpPost();
         post.setId(postId);
         post.setTitle("Test Post");
@@ -50,130 +51,202 @@
         post.setAuthorId("user1");
         post.setCreateTime(LocalDateTime.now());
 
-        HelpComment comment1 = new HelpComment();
-        comment1.setId(1);
-        comment1.setPostId(postId);
-        comment1.setParentId(0);
-        comment1.setAuthorId("user2");
-        comment1.setContent("Comment 1");
-        comment1.setCreateTime(LocalDateTime.now());
+        HelpComment c1 = new HelpComment();
+        c1.setId(1); c1.setPostId(postId); c1.setParentId(0);
+        c1.setAuthorId("user2"); c1.setContent("Comment 1");
+        c1.setCreateTime(LocalDateTime.now());
 
-        HelpComment comment2 = new HelpComment();
-        comment2.setId(2);
-        comment2.setPostId(postId);
-        comment2.setParentId(0);
-        comment2.setAuthorId("user3");
-        comment2.setContent("Comment 2");
-        comment2.setCreateTime(LocalDateTime.now());
+        HelpComment c2 = new HelpComment();
+        c2.setId(2); c2.setPostId(postId); c2.setParentId(0);
+        c2.setAuthorId("user3"); c2.setContent("Comment 2");
+        c2.setCreateTime(LocalDateTime.now());
 
-        List<HelpComment> allComments = Arrays.asList(comment1, comment2);
+        List<HelpComment> comments = Arrays.asList(c1, c2);
 
         when(postService.getById(postId)).thenReturn(post);
-        // 明确指定使用 Wrapper 参数的 list 方法
-        when(commentService.list(any(Wrapper.class))).thenReturn(allComments);
+        // 避免重载二义性，明确 stub list(Wrapper)
+        doReturn(comments)
+                .when(commentService)
+                .list(any(Wrapper.class));
 
-        // Act
         Result result = postController.getPost(postId);
 
-        // Assert
         assertEquals(200, result.getCode());
         assertEquals(post, result.getData().get("post"));
-        List<?> comments = (List<?>) result.getData().get("comments");
-        assertNotNull(comments);
-        assertEquals(2, comments.size());
+        @SuppressWarnings("unchecked")
+        List<HelpComment> ret = (List<HelpComment>) result.getData().get("comments");
+        assertEquals(2, ret.size());
+
         verify(postService, times(1)).getById(postId);
         verify(commentService, times(1)).list(any(Wrapper.class));
     }
 
     @Test
     void listPosts_ShouldReturnPaginatedPosts() {
-        // Arrange
-        int page = 1;
-        int size = 5;
+        int page = 1, size = 5;
+        HelpPost p1 = new HelpPost(); p1.setId(1); p1.setAuthorId("u1");
+        HelpPost p2 = new HelpPost(); p2.setId(2); p2.setAuthorId("u2");
+        List<HelpPost> posts = Arrays.asList(p1, p2);
 
-        HelpPost post1 = new HelpPost();
-        post1.setId(1);
-        post1.setTitle("Post 1");
-        post1.setContent("Content 1");
-        post1.setAuthorId("user1");
-        post1.setCreateTime(LocalDateTime.now());
-
-        HelpPost post2 = new HelpPost();
-        post2.setId(2);
-        post2.setTitle("Post 2");
-        post2.setContent("Content 2");
-        post2.setAuthorId("user2");
-        post2.setCreateTime(LocalDateTime.now());
-
-        List<HelpPost> posts = Arrays.asList(post1, post2);
-        Page<HelpPost> pageResult = new Page<>(page, size, posts.size());
-        pageResult.setRecords(posts);
+        Page<HelpPost> pageResult = new Page<>(page, size);
+        pageResult.setRecords(posts).setTotal(posts.size());
 
         when(postService.page(any(Page.class), any())).thenReturn(pageResult);
 
-        // Act
         Result result = postController.listPosts(page, size);
 
-        // Assert
         assertEquals(200, result.getCode());
         assertEquals(posts, result.getData().get("records"));
-        assertEquals((long)posts.size(), ((Long)result.getData().get("total")).longValue()); // 修改为比较long值
+        assertEquals((long) posts.size(), result.getData().get("total"));
+
         verify(postService, times(1)).page(any(Page.class), any());
     }
 
     @Test
     void getPost_ShouldReturnError_WhenPostNotExists() {
-        // Arrange
         int postId = 1;
         when(postService.getById(postId)).thenReturn(null);
 
-        // Act
         Result result = postController.getPost(postId);
 
-        // Assert
         assertEquals(500, result.getCode());
         assertEquals("帖子不存在", result.getMessage());
-        verify(postService, times(1)).getById(postId);
 
+        verify(postService, times(1)).getById(postId);
     }
 
     @Test
     void likePost_ShouldReturnSuccess() {
-        // Arrange
         int postId = 1;
         doNothing().when(postService).incrementLike(postId);
 
-        // Act
         Result result = postController.likePost(postId);
 
-        // Assert
         assertEquals(200, result.getCode());
         verify(postService, times(1)).incrementLike(postId);
     }
 
     @Test
-    void addComment_ShouldReturnSuccess() {
-        // Arrange
-        int postId = 1;
+    void deletePost_ShouldReturnSuccess_WhenPostRemoved() {
+        int postId = 42;
+        // remove 返回 boolean，而非 void
+        when(commentService.remove(any(Wrapper.class))).thenReturn(true);
+        when(postService.removeById(postId)).thenReturn(true);
 
-        HelpComment comment = new HelpComment();
-        comment.setId(1); // 添加ID设置
-        comment.setContent("Test comment");
-        comment.setAuthorId("user2");
-        comment.setCreateTime(LocalDateTime.now());
+        Result result = postController.deletePost(postId);
 
-        when(postService.getById(postId)).thenReturn(new HelpPost());
-        when(commentService.save(any(HelpComment.class))).thenReturn(true);
-        when(commentService.getById(anyInt())).thenReturn(comment);
-        when(postService.getById(anyInt())).thenReturn(new HelpPost()); // 添加这行
-
-        // Act
-        Result result = postController.comment(postId, comment);
-
-        // Assert
         assertEquals(200, result.getCode());
-        assertNotNull(result.getData().get("comment"));
+        verify(commentService, times(1)).remove(any(Wrapper.class));
+        verify(postService, times(1)).removeById(postId);
+    }
+    @Test
+    void deletePost_ShouldReturnError_WhenPostRemoveFails() {
+        int postId = 42;
+        when(commentService.remove(any(Wrapper.class))).thenReturn(true);
+        when(postService.removeById(postId)).thenReturn(false);
+
+        Result result = postController.deletePost(postId);
+
+        assertEquals(500, result.getCode());
+        assertEquals("删除帖子失败", result.getMessage());
+        verify(commentService, times(1)).remove(any(Wrapper.class));
+        verify(postService, times(1)).removeById(postId);
+    }
+
+    @Test
+    void addCommentWithoutImage_ShouldReturnSuccess() {
+        int postId    = 7;
+        String author = "user2";
+        String content= "Hello";
+
+        // 这是我们希望最后返回的那个对象
+        HelpComment saved = new HelpComment();
+        saved.setId(99);
+        saved.setPostId(postId);
+        saved.setAuthorId(author);
+        saved.setContent(content);
+        saved.setImageUrl(null);
+
+        // 1) stub save(...)：拦截到 comment，将它的 id 设为 99
+        doAnswer(invocation -> {
+            HelpComment arg = invocation.getArgument(0);
+            arg.setId(saved.getId());
+            return true;
+        }).when(commentService).save(any(HelpComment.class));
+
+        // 2) stub getById(99) -> saved
+        when(commentService.getById(saved.getId())).thenReturn(saved);
+
+        // 回复数的模拟
+        doNothing().when(postService).incrementReplyCount(postId);
+        HelpPost stubPost = new HelpPost();
+        stubPost.setReplyCount(5);
+        when(postService.getById(postId)).thenReturn(stubPost);
+
+        // 调用接口
+        Result result = postController.comment(postId, author, content, null);
+
+        // 断言
+        assertEquals(200, result.getCode());
+        assertEquals(saved, result.getData().get("comment"));
+        assertEquals(5,     result.getData().get("newReplyCount"));
+
         verify(commentService, times(1)).save(any(HelpComment.class));
+        verify(postService,   times(1)).incrementReplyCount(postId);
+    }
+
+    @Test
+    void addCommentWithImage_ShouldReturnSuccess() throws Exception {
+        int postId    = 8;
+        String author = "user3";
+        String content= "With Image";
+
+        // 准备一个小文件
+        MockMultipartFile mockFile = new MockMultipartFile(
+                "image", "test.jpg", "image/jpeg", new byte[]{1,2,3}
+        );
+
+        // 我们要“拿回”给前端的对象
+        HelpComment saved = new HelpComment();
+        saved.setId(100);
+        saved.setPostId(postId);
+        saved.setAuthorId(author);
+        saved.setContent(content);
+        saved.setImageUrl("/uploads/whatever.jpg");
+
+        // 1) save(...) 时给 comment 赋 id=100
+        doAnswer(invocation -> {
+            HelpComment arg = invocation.getArgument(0);
+            arg.setId(saved.getId());
+            // 同时把 imageUrl 塞一下，模拟上传后持久化时已经写入
+            arg.setImageUrl(saved.getImageUrl());
+            return true;
+        }).when(commentService).save(any(HelpComment.class));
+
+        // 2) getById(100) -> saved
+        when(commentService.getById(saved.getId())).thenReturn(saved);
+
+        // 回复数
+        doNothing().when(postService).incrementReplyCount(postId);
+        HelpPost stubPost = new HelpPost();
+        stubPost.setReplyCount(10);
+        when(postService.getById(postId)).thenReturn(stubPost);
+
+        // 调用
+        Result result = postController.comment(postId, author, content, mockFile);
+
+        assertEquals(200, result.getCode());
+        assertEquals(saved, result.getData().get("comment"));
+        assertEquals(10,    result.getData().get("newReplyCount"));
+
+        // 并且真正保存的对象也带上了 imageUrl
+        ArgumentCaptor<HelpComment> captor = ArgumentCaptor.forClass(HelpComment.class);
+        verify(commentService).save(captor.capture());
+        HelpComment toSave = captor.getValue();
+        assertEquals(saved.getImageUrl(), toSave.getImageUrl());
+
         verify(postService, times(1)).incrementReplyCount(postId);
     }
-}
\ No newline at end of file
+
+
+}
diff --git a/uploads/1110a6dc-b6b6-4408-b33f-97afacded945.jpg b/uploads/1110a6dc-b6b6-4408-b33f-97afacded945.jpg
new file mode 100644
index 0000000..aed2973
--- /dev/null
+++ b/uploads/1110a6dc-b6b6-4408-b33f-97afacded945.jpg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/uploads/4876d616-3494-4aed-896e-01edf4e0f6a6.jpg b/uploads/4876d616-3494-4aed-896e-01edf4e0f6a6.jpg
new file mode 100644
index 0000000..aed2973
--- /dev/null
+++ b/uploads/4876d616-3494-4aed-896e-01edf4e0f6a6.jpg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/uploads/5fb50a1b-c4d7-42cf-82c5-92438d94b1c1.png b/uploads/5fb50a1b-c4d7-42cf-82c5-92438d94b1c1.png
new file mode 100644
index 0000000..71bd63e
--- /dev/null
+++ b/uploads/5fb50a1b-c4d7-42cf-82c5-92438d94b1c1.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/uploads/69c706c7-6ae4-4e2c-9c22-6d0e8874b228.jpg b/uploads/69c706c7-6ae4-4e2c-9c22-6d0e8874b228.jpg
new file mode 100644
index 0000000..aed2973
--- /dev/null
+++ b/uploads/69c706c7-6ae4-4e2c-9c22-6d0e8874b228.jpg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/uploads/77032da9-b19b-4bad-a5f4-97bb656ad462.jpg b/uploads/77032da9-b19b-4bad-a5f4-97bb656ad462.jpg
new file mode 100644
index 0000000..aed2973
--- /dev/null
+++ b/uploads/77032da9-b19b-4bad-a5f4-97bb656ad462.jpg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/uploads/82d39fb4-7a1e-491f-8a62-e14f796629fe.jpg b/uploads/82d39fb4-7a1e-491f-8a62-e14f796629fe.jpg
new file mode 100644
index 0000000..4a7a6e2
--- /dev/null
+++ b/uploads/82d39fb4-7a1e-491f-8a62-e14f796629fe.jpg
Binary files differ
diff --git a/uploads/8dcddc1c-ec93-4ffb-881d-1531a3b3f3e0.png b/uploads/8dcddc1c-ec93-4ffb-881d-1531a3b3f3e0.png
new file mode 100644
index 0000000..71bd63e
--- /dev/null
+++ b/uploads/8dcddc1c-ec93-4ffb-881d-1531a3b3f3e0.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/uploads/ac46e0ec-891b-4cfb-bece-799f30cbb1f9.jpg b/uploads/ac46e0ec-891b-4cfb-bece-799f30cbb1f9.jpg
new file mode 100644
index 0000000..aed2973
--- /dev/null
+++ b/uploads/ac46e0ec-891b-4cfb-bece-799f30cbb1f9.jpg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/uploads/bad196f2-d2a7-4f24-8cf9-6d450f82daf1.jpg b/uploads/bad196f2-d2a7-4f24-8cf9-6d450f82daf1.jpg
new file mode 100644
index 0000000..4a7a6e2
--- /dev/null
+++ b/uploads/bad196f2-d2a7-4f24-8cf9-6d450f82daf1.jpg
Binary files differ
