带Hamcrest匹配器的TetsNG SoftAssert

时间:2018-09-03 13:48:42

标签: testng hamcrest

我想在TestNG测试中使用Hamcrest匹配器,并且特别要使用一个软断言。我怎样才能做到这一点?我知道我可以在以下测试中使用Hamcrest的断言:

assertThat(actual, containsInAnyOrder(expected));

但是我不明白如何使用像这样的TestNG软断言方法:

SoftAssert softAssert = new SoftAssert();

与Hamcrest匹配器一起

因为我无法像assertThat那样在TestNG的softAssert上调用Hamcrest的softAssert.assertThat(...)

那么,将Hamcrest匹配器与TestNG一起使用的正确方法是什么?

1 个答案:

答案 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关于软断言的启发。