You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用Kotlin作用域函数编写测试?能否替代assertThat多次调用?

Kotlin作用域函数在测试用例中的使用

1. 能否使用Kotlin作用域函数来编写测试用例?

绝对可以。Kotlin的作用域函数(比如let、run、with)本身就是为简化对象的连续操作设计的,在测试用例中使用它们能让代码更紧凑、可读性更强,尤其适合对同一对象执行多步断言的场景。

2. 是否可以使用作用域函数替代对assertThat(...)的多次单独调用?

当然可以,这正是作用域函数的优势之一。你的示例代码里多次调用json.write(cashCard)不仅冗余,还可能因重复执行带来不必要的性能损耗,用作用域函数就能解决这个问题。

优化后的测试代码如下:

fun cashCardSerializationTest() {
    val cashCard = CashCard(99L, 123.45)

    json.write(cashCard).let { serializedCashCard ->
        assertThat(serializedCashCard).isStrictlyEqualToJson("expected.json")
        assertThat(serializedCashCard).hasJsonPathNumberValue("@.id")
        assertThat(serializedCashCard).extractingJsonPathNumberValue("@.id")
    }
}

这里用let函数把序列化后的结果一次性赋值给serializedCashCard,然后在作用域内对这个对象完成所有断言,既避免了重复序列化操作,也让逻辑更连贯。

你也可以用run函数(无需显式命名参数,直接用this指代上下文对象):

fun cashCardSerializationTest() {
    val cashCard = CashCard(99L, 123.45)

    json.write(cashCard).run {
        assertThat(this).isStrictlyEqualToJson("expected.json")
        assertThat(this).hasJsonPathNumberValue("@.id")
        assertThat(this).extractingJsonPathNumberValue("@.id")
        // 甚至可以省略this,直接调用断言方法
        assertThat(isStrictlyEqualToJson("expected.json"))
    }
}

内容的提问来源于stack exchange,提问作者user12048126

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 17:42:26