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

AssertJ的filteredOn方法在assertk中的等效实现是什么?

AssertJ filteredOn 的 assertk 等效实现

在assertk中,没有和AssertJ filteredOn完全对应的内置方法,但可以通过两种简洁的方式实现相同的列表过滤断言逻辑:

方式一:直接过滤列表后断言

利用Kotlin标准库的filter函数先筛选出目标元素,再对过滤结果执行断言:

@Test
fun `filtered assertion in assertk`() {
    val amenities = listOf(
        Amenity(name = "Camping", selected = true),
        Amenity(name = "Hiking", selected = false),
        Amenity(name = "Swimming", selected = false)
    )

    assertThat(amenities.filter { it.selected })
        .containsExactly(Amenity(name = "Camping", selected = true))
}

data class Amenity(
    val name: String,
    val selected: Boolean
)

方式二:使用transform在断言链中完成过滤

如果希望保持断言链的连贯性,可以用assertk的transform方法,在断言流程中嵌入过滤逻辑,还能添加自定义描述提升失败信息的可读性:

@Test
fun `filtered assertion with transform`() {
    val amenities = listOf(
        Amenity(name = "Camping", selected = true),
        Amenity(name = "Hiking", selected = false),
        Amenity(name = "Swimming", selected = false)
    )

    assertThat(amenities)
        .transform("selected amenities") { it.filter { amenity -> amenity.selected } }
        .containsExactly(Amenity(name = "Camping", selected = true))
}

两种方式都能实现和AssertJ filteredOn完全一致的效果,具体选择可以根据代码风格和可读性需求决定。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:00:17