当前位置: 首页 > 知识库问答 >
问题:

关于两个值的Hamcrest断言

支彭亮
2023-03-14

我可以很容易地用两种可能的结果进行断言:

assertThat(result, anyOf(true, false)); // just a sample, doesn't make sense as an assertion

但是,我需要执行断言,我的结果之一等于一些值:

assertThat(result1 || result2, is(true));

上述方法有效,但是错误消息没有说明哪个结果是false。Hamcrest有类似以下的吗?

assertThat(anyOf(result1, result2), is(true)); // just a hypothetical assertion

共有1个答案

吴展
2023-03-14

您可以反向编写断言:

assertThat(true, anyOf(is(result1), is(result2)))

result1result2不是true时,这仍然会引发断言错误,并且消息将告诉最终值或result1result2。。。在预期的部分,这使它有点尴尬。

从你的问题:

但是,我需要执行断言,我的结果之一等于一些值:

这意味着您的实际用例正在确定结果列表是否具有给定值。这可以通过以下方式清楚地表达:

assertThat(Arrays.asList(result1, result2), hasItem(true));

这是断言由两个结果组成的列表具有给定的项。如果没有,断言错误将是:

Expected: a collection containing <true>
     but: was <false>, was <false>

该消息告诉您集合中每个元素的值。

 类似资料:
  • 有没有Hamcrest可以让我明确断言,返回对象的的方法的结果至少有一个对象包含具有特定值的属性? 例如: 测试下的方法返回一个的集合。我需要断言至少有一个人叫彼得。

  • 我对使用hamcrest进行资产评估还很陌生,而且我已经有一个非常糟糕的案例需要测试。 我们有2个不同的自定义对象的数组列表:FilterItem和MyEnum。两者都包含一个属性——比方说“值”——单元测试要传递的属性应该相等。因为对象是不同的,所以我不能简单地断言它们包含的值,这使得断言更加困难。 在每个我想断言的单元测试中,我都将断言逻辑提取到一个新方法中,如下所示: 单元测试现在都通过了,

  • 我如何断言某个东西是? 举个例子 但是我得到一个错误,告诉我在中不能有。

  • 问题内容: 如何将我的东西是? 例如 但是我收到一个错误消息,说我不能进入。 问题答案: 您可以使用方法:

  • 其中 actual 是 ID 为 Long 的 POJO。 我明白了, 方法 assertThat(T, Matcher 从各种文档和其他stackoverflow页面来看,它应该是有效的,但我得到了上述错误。