使用Kotlin (Spring Boot) + MockMVC + DatabaseRider轻松实现API集成测试


在本文中,我将介绍如何对使用服务器端 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