總結
單元測試的特性和注意事項
- 可以被自動化運行
- 單元測試彼此獨立
- 測試結果穩定 ,不受外部服務影響
JUnit5
- @Test
- assert 斷言方法
- @BeforeEach、@AfterEach、@BeforeAll、@AfterAll
- @Disabled、@DisplayName
如何測試Spring Boot 程式
- Service 層 、Dao 層的測試
- @SpringBootTest
- @Transactiona
- Controller 層的測試
- MockMvc
- 主架構:
- RequestBuilder [創建 Http Request]
- mockMvc.perform() [發起 Http Request]
- andExpect() [驗證結果]
隔絕外部服務的依賴
- Mock 測試 - Mockito
- @MockBean、@SpyBean
- 模擬方法的返回值: when…thenReturn、doReturn…when
- 模擬噴出 Exception: when…thenThrow、doThrow…when
- 使用 H2 資料庫
- schema.sql [放創建table 的 sql]
- data.sql [放插入數據的 sql]
經驗分享
- 單元測試的數量不是越多越好
- 記得要測 Error Case
- IntelliJ 的 Run Test With Converage 功能
測試驅動開發
- Test-Driven Development (TDD)
- 先寫測試 , 再寫開發