使用Kotlin (Spring Boot) + MockMVC + DatabaseRider輕鬆實現API整合測試

banq發表於2022-11-13

在本文中,我將介紹如何對使用伺服器端 Kotlin(Spring Boot)建立的 Web API 進行 API 整合測試。透過結合MockMVC和DatabseRider,可以輕鬆實現API整合測試。

MockMVC
MockMVC 是 Spring Test 中包含的測試框架之一。無需手動向實現的伺服器傳送請求即可進行 API 測試。
MockMVC 需要 @AutoConfigureMockMvc 和 @SpringBootTest 進行初始化。

class SampleTest {
    @SpringBootTest
    @AutoConfigureMockMvc
    @TestInstance(TestInstance.Lifecycle.PER_CLASS)
    class Get {
        @Autowired
        lateinit var mockMvc: MockMvc

        @BeforeAll
        fun reset() = //每次測試時執行的操作


        @Test
        fun test() {

        }
    }
}


使用 MockMvc 傳送請求引數如下。還可以評估響應狀態和響應正文。

val response = mockMvc.perform(
    MockMvcRequestBuilders
        .get("/path/to/api")
        .contentType(MediaType.APPLICATION_JSON)
).andReturn().response
val actualStatus = response.status
val actualResponseBody = response.contentAsString


DatabaseRider
DatabaseRider 是一個 Java 庫,它允許您使用註釋簡潔地編寫 DB 測試。如下圖,註解可以讓你插入輸入資料,測試後期待DB,測試完成後將表寫入檔案。這意味著您可以在測試之前指定要插入資料庫的資料,並在測試之後比較資料庫應該是什麼。E2E API測試除了能保證響應外,還能保證DB狀態,與API測試非常相容。

@Test
@DBRider
@DataSet("path/to/input/data.{yml,csv,cml}")// 指定輸入資料檔案
@ExpectedDataSet(
    value = ["path/to/expected/data.{yml,csv,cml}"], //指定預期資料的檔案
    orderBy = ["id"]。
    ignoreCols = ["createdAt", "upedAt"], // 忽略後設資料
)
// 注意:一旦資料被匯出,註釋掉
@ExportDataSet(
    format = DataSetFormat.YML, // 指定測試完成後資料匯出的格式。
    outputName = "path/to/export/data.{yml,csv,cml}", // 指定要匯出的檔案。
    includeTables = ["customer"] // 指定要包括的列
)
fun `test`() {
    // 編寫測試。
}


更多見:Github

相關文章