Chr*_*ris 3 java kotlin junit5 kotest
在 Junit5 中,我经常使用以下代码片段来测试集合是否包含满足某些条件的元素:
assertThat("The list of addresses", addresses.getAddressReferences(), containsInAnyOrder(
allOf(
hasProperty("id", is("abc")),
hasProperty("role", is(SENDER))
),
allOf(
hasProperty("id", is("def")),
hasProperty("role", is(RECEIVER))
)
));
Run Code Online (Sandbox Code Playgroud)
我还没有找到一种方法来在我尝试过的 kotest 中表达这一点,shouldContainExactlyInAnyOrder
但他们期望一个实际的对象。我不知道如何表达我想针对不同的匹配器测试每个元素。
我还检查了检查员,这可能是解决方案,但它们似乎只能帮助立即对列表中的所有元素做出断言。
科测试检查员可能就是您正在寻找的。它们允许测试集合中的所有元素、没有元素或特定数量的元素是否满足特定断言。
如果不了解地址引用数据类型,我会假设您的示例可以转换为 Kotest,如下所示:
withClue("The list of addresses") {
val references = addresses.getAddressReferences()
assertSoftly {
references shouldHaveSize 2
references.forOne {
it.id shouldBe "abc"
it.role shouldBe SENDER
}
references.forOne {
it.id shouldBe "def"
it.role shouldBe RECEIVER
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如@LeoColman 所指出的,withClue
和assertSoftly
不是强制性的:
withClue
只是将给定的线索作为附加信息添加到断言错误消息中,以防断言失败。assertSoftly
让其中的所有断言运行,而不是在第一个失败的断言处停止。这意味着,如果我们有一个包含 3 个元素的集合,我们仍然可以获得有关存在或不存在带有 和 的元素这一事实的id
"abc"
信息role
SENDER
。 归档时间: |
|
查看次数: |
1774 次 |
最近记录: |