我想在TestNG测试中使用Hamcrest匹配器,特别是软断言。我怎么能这么做?我知道我可以在测试中使用Hamcrest的断言,例如:
assertThat(actual, containsInAnyOrder(expected));
SoftAssert softAssert = new SoftAssert();
据我所知,不能直接将TestNG中的softassert
与hamcrest匹配器断言混合。
但是您可以在hamcrest matcher库中使用org.assertj.core.api.softassertions
来尝试进行软断言。
javadocs forSoftAssertions
有一些示例。
为了完整起见,我在这里包含了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关于软断言的博客。
它看起来像hamcrest(尽管看起来,还有更多)。为什么我会选择使用(除了看起来类稍微小一点之外),为什么这两个类如此相似?
我的问题是:这是一个bug还是我遗漏了什么? 事实上,不同的匹配器以不同的格式返回消息是一个很大的问题,因为我试图编写一些自定义的验证框架,该框架使用匹配器,并且能够在出现任何错误时返回良好的人类可读的消息。我似乎不能为此目的使用方法...
我试图使用org.hamcrest.matchers.contains(java.util.list >),但是编译器告诉我它无法解析该方法。 我甚至尝试了Hamcrest在这里给出的示例,但得到了相同的编译错误: 但随后我得到了另一个编译错误: 有没有办法恰当地使用这种方法?
对于类; 我正在构建这样的自定义Matcher; 检查列表是否包含
问题所在 我目前正在尝试使用Hamcrest匹配器来断言返回的列表类型是特定类型。例如,假设我的服务调用返回了以下列表: null 使用Hamcrest匹配器,是否有一种方法可以断言空列表是某种类型的参数化的(例如)?
我需要检查是否一个url是有效的和空值是可接受的以及。我是这个图书馆的新手,被这个错误难倒了。