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
相关产品推荐
相关产品推荐

