diff --git a/src/test/java/com/example/g8backend/service/PostHistoryServiceTest.java b/src/test/java/com/example/g8backend/service/PostHistoryServiceTest.java
new file mode 100644
index 0000000..143422d
--- /dev/null
+++ b/src/test/java/com/example/g8backend/service/PostHistoryServiceTest.java
@@ -0,0 +1,75 @@
+package com.example.g8backend.service;
+
+import com.example.g8backend.entity.PostView;
+import com.example.g8backend.mapper.PostMapper;
+import com.example.g8backend.mapper.PostViewMapper;
+import com.example.g8backend.service.impl.PostServiceImpl;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.ArgumentMatcher;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.*;
+
+@ExtendWith(MockitoExtension.class)
+@Transactional
+public class PostHistoryServiceTest {
+
+    @Mock
+    private PostViewMapper postViewMapper;
+
+    @Mock
+    private PostMapper postMapper;
+
+    @InjectMocks
+    private PostServiceImpl postService;
+
+    @Test
+    public void testRecordViewHistory_NormalCase() {
+        // 测试数据
+        Long userId = 1L;
+        Long postId = 100L;
+
+        // 调用方法
+        postService.recordViewHistory(userId, postId);
+
+        // 验证行为
+        verify(postViewMapper, times(1)).insert(any(PostView.class));
+        verify(postMapper, times(1)).incrementViewCount(eq(postId));
+    }
+
+    @Test
+    public void testRecordViewHistory_CheckDataIntegrity() {
+        Long userId = 2L;
+        Long postId = 200L;
+
+        postService.recordViewHistory(userId, postId);
+
+        // 显式指定参数类型为 PostView
+        verify(postViewMapper).insert(argThat(new ArgumentMatcher<PostView>() {
+            @Override
+            public boolean matches(PostView view) {
+                return view.getUserId().equals(userId) &&
+                        view.getPostId().equals(postId) &&
+                        view.getViewTime() != null;
+            }
+        }));
+    }
+    @Test
+    public void testRecordViewHistory_MultipleCalls() {
+        // 模拟多次调用
+        Long postId = 300L;
+        postService.recordViewHistory(1L, postId);
+        postService.recordViewHistory(2L, postId);
+
+        // 验证浏览数更新次数
+        verify(postMapper, times(2)).incrementViewCount(postId);
+    }
+}
\ No newline at end of file
diff --git a/src/test/java/com/example/g8backend/service/PostServiceTest.java b/src/test/java/com/example/g8backend/service/PostServiceTest.java
index 0161229..9f8fb14 100644
--- a/src/test/java/com/example/g8backend/service/PostServiceTest.java
+++ b/src/test/java/com/example/g8backend/service/PostServiceTest.java
@@ -2,6 +2,7 @@
 
 import com.example.g8backend.entity.Post;
 import com.example.g8backend.mapper.PostMapper;
+import com.example.g8backend.mapper.PostViewMapper;
 import com.example.g8backend.service.impl.PostServiceImpl;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
@@ -26,6 +27,9 @@
     @Mock
     private PostMapper postMapper;
 
+    @Mock
+    private PostViewMapper postViewMapper;
+
     private PostServiceImpl postService;
 
     private Post testPost;
@@ -33,7 +37,7 @@
     @BeforeEach
     void setUp() {
         MockitoAnnotations.openMocks(this);
-        postService = new PostServiceImpl(postMapper);
+        postService = new PostServiceImpl(postMapper, postViewMapper);
         testPost = createTestPost();
     }
 
