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

时间:2016-06-02 18:47:33

标签: java junit assert hamcrest

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

  @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;
  }

2 个答案:

答案 0 :(得分:3)

要使用匹配器,您需要使用assertThat代替assertEquals

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

答案 1 :(得分:1)

@Test
public void testRandomFunction() {
  int result = randomFunction(5);
  assertTrue(result == 2 || result == 3);
}