首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java Service 層 void 保存方法單元測試實戰:JUnit + Mockito 驗證數據落庫

     編輯:程式設計疑難解答

場景

Service 類中有一個 void save(String param, Date d1, Date d2) 方法,需要編寫單元測試驗證數據是否成功持久化。

測試策略

  1. 使用 JUnit 5 編寫測試類。
  2. Mock 數據源:利用 @MockBean 或 Mockito.mock 模擬 Repository/DAO,避免依賴真實數據庫。
  3. 驗證交互:調用 service.save(...) 後,使用 verify(repository).save(argThat(...)) 斷言調用參數。
  4. 集成測試(可選):使用 @DataJpaTest 或 @SpringBootTest 配合內嵌數據庫(H2)進行真實落庫驗證。

代碼示例

@ExtendWith(MockitoExtension.class)
class MyServiceTest {
    @Mock
    private MyRepository repository;
    @InjectMocks
    private MyService service;

    @Test
    void testSave() {
        String str = "test";
        Date d1 = new Date(), d2 = new Date();
        service.save(str, d1, d2);
        verify(repository).save(argThat(entity -> 
            entity.getStr().equals(str) &&
            entity.getD1().equals(d1) &&
            entity.getD2().equals(d2)
        ));
    }
}

集成測試示例

@DataJpaTest
class MyServiceIntegrationTest {
    @Autowired
    private MyRepository repository;
    @Autowired
    private MyService service;

    @Test
    void testSaveRealDb() {
        service.save("real", new Date(), new Date());
        List<MyEntity> list = repository.findAll();
        assertEquals(1, list.size());
        assertEquals("real", list.get(0).getStr());
    }
}

總結

對 void 保存方法,核心在於「驗證調用」而非「驗證返回值」。單元測試用 Mock 驗證參數傳遞,集成測試用真實數據庫驗證落庫,雙重保障代碼質量。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved