Testng 带Hamcrest匹配器的TetsNG SoftAssert

Testng 带Hamcrest匹配器的TetsNG SoftAssert,testng,hamcrest,Testng,Hamcrest,我想在TestNG测试中使用一个Hamcrest匹配器,并使用一个软断言。我该怎么做?我知道我可以在测试中使用Hamcrest的断言,如: assertThat(actual, containsInAnyOrder(expected)); 但我不明白如何使用TestNG软断言方法,比如: SoftAssert softAssert = new SoftAssert(); 还有一个汉克雷斯特匹配器 因为我无法在TestNG的softAssert上调用Hamcrest的assertThat,就像

我想在TestNG测试中使用一个Hamcrest匹配器,并使用一个软断言。我该怎么做?我知道我可以在测试中使用Hamcrest的断言,如:

assertThat(actual, containsInAnyOrder(expected));
但我不明白如何使用TestNG软断言方法,比如:

SoftAssert softAssert = new SoftAssert();
还有一个汉克雷斯特匹配器

因为我无法在TestNG的
softAssert
上调用Hamcrest的
assertThat
,就像
softAssert.assertThat(…)


那么,将Hamcrest matcher与TestNG结合使用的正确方法是什么呢?

据我所知,您不能直接将TestNG中的
SoftAssert
与Hamcrest matcher断言混合使用

但是您可以使用hamcrest matcher库中的
org.assertj.core.api.SoftAssertions
来尝试进行软断言

for
SoftAssertions
有一些示例

为了完整起见,我在这里包括来自javadocs的代码片段

@测试
公共空间主持人晚餐派对无人死亡的地方(){
大厦=新大厦();
豪宅。主人可能谋杀晚餐党();
SoftAssertions=新的SoftAssertions();
轻轻地。断言(大厦。客人())为(“活着的客人”)。isEqualTo(7);
轻轻地。断言(大厦。厨房())为(“厨房”)。isEqualTo(“干净”);
轻轻地.assertThat(mannese.library()).as(“library”).isEqualTo(“clean”);
轻轻地。断言(大厦。左轮手枪())为(“左轮手枪弹药”)。isEqualTo(6);
柔和地。断言(大厦。烛台())为(“烛台”)。isEqualTo(“质朴”);
轻声地。断言(大厦。上校())为(“上校”)。isEqualTo(“好肯普”);
轻声地。断言(豪宅。教授())。作为(“教授”)。isEqualTo(“好肯普”);
轻轻地。assertAll();
}

如果你看一下代码库,你会注意到评论说它的灵感来自Cedric关于软断言的文章。

是的,我看到了关于AssertJ和软断言的博客文章。但是我只能在我的项目中使用TestNG和Hamcrest。因此,如果我想使用SoftAssert,我应该尝试使用matchers内置的TestNG。TestNG
SoftAssert
API不能让您感受到hamcrest matcher提供的功能。但两者都做同样的事情。因此,如果您习惯于使用类似hamcrest的API进行断言,那么使用
SoftAssertions
继续获得相同的感觉。否则,您可以使用TestNG中的
SoftAssert
。您可能会感到困惑,因为
SoftAssertions
不是测试的一部分。这是我们的一部分。