diff --git a/src/test/java/edu/bjtu/groupone/backend/CategoryServiceTest.java b/src/test/java/edu/bjtu/groupone/backend/CategoryServiceTest.java
new file mode 100644
index 0000000..b09ffb2
--- /dev/null
+++ b/src/test/java/edu/bjtu/groupone/backend/CategoryServiceTest.java
@@ -0,0 +1,41 @@
+package edu.bjtu.groupone.backend;
+
+import edu.bjtu.groupone.backend.domain.entity.Category;
+import edu.bjtu.groupone.backend.mapper.CategoryMybatisMapper;
+//import edu.bjtu.groupone.backend.model.Category;
+import edu.bjtu.groupone.backend.service.CategoryService;
+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 java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.Mockito.*;
+
+class CategoryServiceTest {
+
+    @Mock
+    private CategoryMybatisMapper mapper;
+
+    @InjectMocks
+    private CategoryService service;
+
+    @BeforeEach
+    void setUp() {
+        MockitoAnnotations.openMocks(this);
+    }
+
+    @Test
+    void testGetAllSubcategoryIds() {
+        Category child = new Category(2L, "Child", new Category(1L, "Parent", null));
+        when(mapper.findByParentId(1L)).thenReturn(List.of(child));
+        when(mapper.findByParentId(2L)).thenReturn(List.of());
+
+        List<Long> ids = service.getAllSubcategoryIds(1L);
+
+        assertEquals(List.of(1L, 2L), ids);
+    }
+}
diff --git a/src/test/java/edu/bjtu/groupone/backend/WorkServiceTest.java b/src/test/java/edu/bjtu/groupone/backend/WorkServiceTest.java
new file mode 100644
index 0000000..85e62c6
--- /dev/null
+++ b/src/test/java/edu/bjtu/groupone/backend/WorkServiceTest.java
@@ -0,0 +1,58 @@
+package edu.bjtu.groupone.backend;
+
+import edu.bjtu.groupone.backend.domain.dto.WorkResponse;
+import edu.bjtu.groupone.backend.domain.entity.Category;
+import edu.bjtu.groupone.backend.domain.entity.Work;
+import edu.bjtu.groupone.backend.mapper.WorkMybatisMapper;
+//import edu.bjtu.groupone.backend.model.Category;
+//import edu.bjtu.groupone.backend.model.Work;
+import edu.bjtu.groupone.backend.service.CategoryService;
+import edu.bjtu.groupone.backend.service.WorkService;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.*;
+import org.springframework.data.domain.*;
+
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.Mockito.*;
+
+class WorkServiceTest {
+
+    @Mock
+    private WorkMybatisMapper mapper;
+
+    @Mock
+    private CategoryService categoryService;
+
+    @InjectMocks
+    private WorkService service;
+
+    @BeforeEach
+    void init() {
+        MockitoAnnotations.openMocks(this);
+    }
+
+    @Test
+    void testGetWorks() {
+        Long categoryId = 1L;
+        List<Long> categoryIds = List.of(categoryId);
+
+        Work mockWork = Work.builder()
+                .id(10L)
+                .title("Test Title")
+                .author("Author")
+                .views(123)
+                .category(Category.builder().id(categoryId).name("Test").build())
+                .build();
+
+        Page<Work> workPage = new PageImpl<>(List.of(mockWork));
+        when(categoryService.getAllSubcategoryIds(categoryId)).thenReturn(categoryIds);
+        when(mapper.findByCategoryIdIn(eq(categoryIds), any(Pageable.class))).thenReturn(workPage);
+
+        Page<WorkResponse> result = service.getWorks(categoryId, 1, 10);
+        assertEquals(1, result.getTotalElements());
+        assertEquals("Test Title", result.getContent().get(0).getTitle());
+    }
+}
diff --git a/src/test/resources/application-test.properties b/src/test/resources/application-test.properties
new file mode 100644
index 0000000..4fb95c7
--- /dev/null
+++ b/src/test/resources/application-test.properties
@@ -0,0 +1,5 @@
+spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
+spring.datasource.driver-class-name=org.h2.Driver
+spring.jpa.hibernate.ddl-auto=create-drop
+spring.jpa.show-sql=true
+spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
\ No newline at end of file
