我想在TestNG测试中使用Hamcrest匹配器,并专门使用软断言。我该怎么做?我知道我可以在测试中使用Hamcrest的断言,例如:
assertThat(actual, containsInAnyOrder(expected));
但是我不明白如何使用像这样的TestNG软断言方法:
SoftAssert softAssert = new SoftAssert();
与哈姆克雷斯特匹配器一起。
因为我不能像softAssert.assertThat(...)
那样在TestNG的softAssert
上调用Hamcrest的assertThat
那么,将Hamcrest匹配器与TestNG一起使用的正确方法是什么?
据我所知,您不能直接将 TestNG 中的SoftAssert
与 hamcrest 匹配器断言混合。
但是,您可以使用 hamcrest 匹配器库中的org.assertj.core.api.SoftAssertions
来尝试执行软断言。
用于SoftAssertions
的javadocs有一些示例。
为了完整起见,我在这里包含了javadocs的代码片段。
@Test
public void host_dinner_party_where_nobody_dies() {
Mansion mansion = new Mansion();
mansion.hostPotentiallyMurderousDinnerParty();
SoftAssertions softly = new SoftAssertions();
softly.assertThat(mansion.guests()).as("Living Guests").isEqualTo(7);
softly.assertThat(mansion.kitchen()).as("Kitchen").isEqualTo("clean");
softly.assertThat(mansion.library()).as("Library").isEqualTo("clean");
softly.assertThat(mansion.revolverAmmo()).as("Revolver Ammo").isEqualTo(6);
softly.assertThat(mansion.candlestick()).as("Candlestick").isEqualTo("pristine");
softly.assertThat(mansion.colonel()).as("Colonel").isEqualTo("well kempt");
softly.assertThat(mansion.professor()).as("Professor").isEqualTo("well kempt");
softly.assertAll();
}
如果你看一下SoftAssertions代码库,你会注意到评论说它的灵感来自Cedric关于软断言的博客。