【问题标题】:Using jUnit 4.12 and Hamcrest 1.3, how can I assert a function returns one of two integers?使用 jUnit 4.12 和 Hamcrest 1.3,我如何断言函数返回两个整数之一?
【发布时间】:2016-06-02 18:47:32
【问题描述】:

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

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

【问题讨论】:

    标签: java junit assert hamcrest


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:
      @Test
      public void testRandomFunction() {
        int result = randomFunction(5);
        assertTrue(result == 2 || result == 3);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-22
        相关资源
        最近更新 更多