使用 jUnit 4.12 和 Hamcrest 1.3,如何断言函数返回两个整数之一



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

  @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)),
);
@Test
public void testRandomFunction() {
  int result = randomFunction(5);
  assertTrue(result == 2 || result == 3);
}

最新更新