diff --git a/src/test/java/com/example/g8backend/service/PostLikeServiceTest.java b/src/test/java/com/example/g8backend/service/PostLikeServiceTest.java
new file mode 100644
index 0000000..987f672
--- /dev/null
+++ b/src/test/java/com/example/g8backend/service/PostLikeServiceTest.java
@@ -0,0 +1,84 @@
+package com.example.g8backend.service;
+
+import com.example.g8backend.entity.Post;
+import com.example.g8backend.entity.PostLike;
+import com.example.g8backend.mapper.PostMapper;
+import com.example.g8backend.service.impl.PostServiceImpl;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import static org.mockito.Mockito.*;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class PostLikeServiceTest {
+
+    @InjectMocks
+    private PostServiceImpl postService;
+
+    @Mock
+    private PostMapper postMapper;
+
+    private Post post;
+
+    @BeforeEach
+    void setUp() {
+        MockitoAnnotations.openMocks(this);  // 初始化mock对象
+        post = new Post();
+        post.setPostId(1L);
+        post.setPostTitle("Test Post");
+        post.setPostContent("This is a test post.");
+        post.setUserId(1L);
+    }
+
+    // 测试点赞功能
+    @Test
+    void likePost_ShouldAddLike_WhenNotAlreadyLiked() {
+        Long userId = 1L;
+        Long postId = 1L;
+
+        // 设置返回值，模拟查询用户是否已点赞
+        when(postMapper.existsByUserIdAndPostId(userId, postId)).thenReturn(false);
+
+        // 调用点赞方法
+        postService.likePost(userId, postId);
+
+        // 验证postMapper的insert方法被调用一次，表示插入点赞记录
+        verify(postMapper, times(1)).insert(any(PostLike.class));
+    }
+
+    // 测试取消点赞功能
+    @Test
+    void unlikePost_ShouldRemoveLike_WhenAlreadyLiked() {
+        Long userId = 1L;
+        Long postId = 1L;
+
+        // 设置返回值，模拟查询用户是否已点赞
+        when(postMapper.existsByUserIdAndPostId(userId, postId)).thenReturn(true);
+
+        // 调用取消点赞方法
+        postService.unlikePost(userId, postId);
+
+        // 验证postMapper的deleteLikeByUserIdAndPostId方法被调用一次，表示删除点赞记录
+        verify(postMapper, times(1)).deleteLikeByUserIdAndPostId(userId, postId);
+    }
+
+    // 测试获取帖子点赞数功能
+    @Test
+    void getPostLikeCount_ShouldReturnCorrectCount() {
+        Long postId = 1L;
+        Long expectedCount = 10L;
+
+        // 模拟查询返回点赞数
+        when(postMapper.selectCount(postId)).thenReturn(expectedCount);
+
+        // 调用获取点赞数方法
+        Long actualCount = postService.getPostLikeCount(postId);
+
+        // 验证返回的点赞数是否正确
+        assertEquals(expectedCount, actualCount);
+    }
+}
