带有 Hamcrest 匹配器的 TetsNG SoftAssert

Vit*_*gov 5 testng hamcrest

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

assertThat(actual, containsInAnyOrder(expected));
Run Code Online (Sandbox Code Playgroud)

但我无法理解如何使用 TestNG 软断言方法,如下所示:

SoftAssert softAssert = new SoftAssert();
Run Code Online (Sandbox Code Playgroud)

与 Hamcrest 匹配器一起使用。

因为我不能像assertThatTestNGsoftAssert一样调用 HamcrestsoftAssert.assertThat(...)

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

Kri*_*van 3

据我所知,您不能直接SoftAssert将 TestNG 与 hamcrest 匹配器断言混合。

但是您可以利用org.assertj.core.api.SoftAssertionshamcrest 匹配器库来尝试进行软断言。

javadoc有一些SoftAssertions示例。

为了完整起见,我在此处包含了 javadoc 中的代码片段。

 @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();
 }
Run Code Online (Sandbox Code Playgroud)

如果您查看SoftAssertions代码库,您会注意到注释说它受到 Cedric关于软断言的博客的启发。