TetsNG SoftAssert with Hamcrest matcher



我想在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关于软断言的博客。

最新更新