我想在TestNG测试中使用Hamcrest匹配器,并且特别要使用一个软断言。我怎样才能做到这一点?我知道我可以在以下测试中使用Hamcrest的断言:
assertThat(actual, containsInAnyOrder(expected));
但是我不明白如何使用像这样的TestNG软断言方法:
SoftAssert softAssert = new SoftAssert();
与Hamcrest匹配器一起
因为我无法像assertThat
那样在TestNG的softAssert
上调用Hamcrest的softAssert.assertThat(...)
那么,将Hamcrest匹配器与TestNG一起使用的正确方法是什么?
答案 0 :(得分:2)
据我所知,您不能直接将TestNG中的SoftAssert
与hamcrest匹配器断言相混合。
但是您可以使用hamcrest匹配器库中的org.assertj.core.api.SoftAssertions
来尝试进行软断言。
SoftAssertions
的{{3}}有一些示例。
为了完整起见,我在此处包括来自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();
}
如果您看一下javadocs代码库,您会注意到注释说明它是受Cedric的SoftAssertions关于软断言的启发。