我有兴趣编写一个测试,使我可以检查一个函数是否返回两个值之一。例如:

  @Test
  public void testRandomFunction() {
    assertEquals(
      either(equalTo(2)).or(equalTo(3)),
      RandomFunction(5)
    );
    return;
  }

在网上阅读后,我发现了有关hamcrest的比赛者。代码可以编译,但是当我运行测试时,似乎将整数5与匹配对象进行了比较,而不是整数2和3。

如果这样做更容易,我愿意尝试除匹配器以外的其他方法。有人知道我该怎么做吗?

我也尝试了以下方法但未成功:
   @Test
  public void testRandomFunction() {
    Set<Integer> acceptedValues = new HashSet<Integer>();
    acceptedValues.add(2);
    acceptedValues.add(3);

    assertEquals(
      isIn(acceptedValues),
      RandomFunction(5)
    );
    return;
  }

最佳答案

要使用匹配器,您需要使用 assertThat 而不是assertEquals

assertThat(
    "RandomFunction result",
    RandomFunction(5),
    either(equalTo(2)).or(equalTo(3)),
);

10-07 20:38