diff --git a/src/test/java/com/example/myproject/controller/UserControllerTest.java b/src/test/java/com/example/myproject/controller/UserControllerTest.java
index a97e169..9fd65d9 100644
--- a/src/test/java/com/example/myproject/controller/UserControllerTest.java
+++ b/src/test/java/com/example/myproject/controller/UserControllerTest.java
@@ -8,6 +8,7 @@
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.springframework.mock.web.MockMultipartFile;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -186,14 +187,13 @@
     void testEditProfile() {
         Long userId = 1L;
         Map<String, Object> profileData = new HashMap<>();
-        profileData.put("avatarUrl", "https://example.com/avatar.jpg");
         profileData.put("nickname", "newNickname");
         profileData.put("gender", "Male");
         profileData.put("description", "Updated description");
         profileData.put("hobbies", "Reading, Hiking");
 
         // 模拟服务层的返回
-        when(userService.editProfile(userId, "https://example.com/avatar.jpg", "newNickname", "Male", "Updated description", "Reading, Hiking"))
+        when(userService.editProfile(userId, "newNickname", "Male", "Updated description", "Reading, Hiking"))
                 .thenReturn(true);
 
         // 调用控制器方法
@@ -203,7 +203,7 @@
         assertEquals("用户资料更新成功", resultMap.get("message"));
 
         // 验证服务层方法是否被调用
-        verify(userService, times(1)).editProfile(userId, "https://example.com/avatar.jpg", "newNickname", "Male", "Updated description", "Reading, Hiking");
+        verify(userService, times(1)).editProfile(userId,  "newNickname", "Male", "Updated description", "Reading, Hiking");
     }
 
     @Test
@@ -231,4 +231,37 @@
         assertEquals(expectedResponse, result);
         verify(userService, times(1)).calculateShareRate(userId);  // 验证服务方法是否被调用
     }
+
+    @Test
+    void testUploadUserAvatar() throws Exception {
+        Long userId = 1L;
+
+        // 构造 Mock 文件
+        MockMultipartFile mockFile = new MockMultipartFile(
+                "file",
+                "avatar.jpg",
+                "image/jpeg",
+                "fake image content".getBytes()
+        );
+
+        // 构造返回值
+        Map<String, Object> mockResponse = new HashMap<>();
+        mockResponse.put("status", "success");
+        mockResponse.put("message", "头像上传成功");
+        mockResponse.put("userId", userId);
+        mockResponse.put("avatarUrl", "/uploads/avatarUrl/1.jpg");
+
+        when(userService.uploadUserAvatar(userId, mockFile)).thenReturn(mockResponse);
+
+        Map<String, Object> resultMap = userController.uploadAvatar(userId, mockFile);
+        assertEquals("success", resultMap.get("status"));
+        assertEquals("头像上传成功", resultMap.get("message"));
+        assertEquals(userId, resultMap.get("userId"));
+        assertEquals("/uploads/avatarUrl/1.jpg", resultMap.get("avatarUrl"));
+
+        // 验证 service 被调用一次
+        verify(userService, times(1)).uploadUserAvatar(userId, mockFile);
+    }
+
+
 }
