断言每个对象属性都匹配 kotlin 测试中的给定谓词
Posted
技术标签:
【中文标题】断言每个对象属性都匹配 kotlin 测试中的给定谓词【英文标题】:Assert that every object property matches given predicate in kotlin test 【发布时间】:2022-01-04 21:02:01 【问题描述】:我有一个对象集合:
data class WeatherForecast(
val city: String,
val forecast: String
// ...
)
我想测试每个项目是否匹配给定的字段谓词。
kotlintest assertions
中是否有任何断言可以让我这样做?
类似:
forecasts.eachItemshouldMatch it.forecast == "SUNNY"
【问题讨论】:
据我在kotlin.test
的documentation 中看到的,似乎没有办法收集多个断言的结果。使用 JUnit5,您将能够使用 assertAll
。
【参考方案1】:
如何使用检查器。
list.forAll
it.forecast shouldBe "SUNNY"
https://kotest.io/docs/assertions/inspectors.html
【讨论】:
【参考方案2】:我最终在 kotest 中提交了 PR,它将提供这样的功能:
https://github.com/kotest/kotest/pull/2692
infix fun <T> Collection<T>.allShouldMatch(p: (T) -> Boolean) = this should match(p)
fun <T> match(p: (T) -> Boolean) = object : Matcher<Collection<T>>
override fun test(value: Collection<T>) = MatcherResult(
value.all p(it) ,
"Collection should have all elements that match the predicate $p",
"Collection should not contain elements that match the predicate $p"
)
【讨论】:
查看@sksamuel 的回答——应该这样做【参考方案3】:您可以简单地使用all
函数;即:
forecasts.all it.forecast == "SUNNY"
【讨论】:
我想从断言中获得关于哪些项目不符合条件的信息forecasts.filterNot()
会满足你对@pixel 的期望吗?以上是关于断言每个对象属性都匹配 kotlin 测试中的给定谓词的主要内容,如果未能解决你的问题,请参考以下文章