代码之家  ›  专栏  ›  技术社区  ›  Mo.

Hamcrest的多个正确结果(是否有一个或匹配器?)

  •  67
  • Mo.  · 技术社区  · 18 年前

    hamcrest 加上JUnit和我有点喜欢它。

    有没有一种方法可以说明多项选择中的一项是正确的?

    差不多

    assertThat( result, is( either( 1, or( 2, or( 3 ) ) ) ) ) //does not work in hamcrest
    

    我正在测试的方法返回集合的一个元素。该列表可能包含多个候选项。我当前的实现返回第一次命中,但这不是一个要求。我希望我的测试用例成功,如果任何可能的候选人被返回。您将如何用Java表达这一点?

    (我对hamcrest备选方案持开放态度)

    2 回复  |  直到 12 年前
        1
  •  123
  •   Jared Burrows    10 年前
    assertThat(result, anyOf(equalTo(1), equalTo(2), equalTo(3)))
    

    从…起 Hamcrest tutorial :

    anyOf-匹配如果任何匹配器匹配,短路(如Java | |)

    另见 Javadoc .

        2
  •  85
  •   schnatterer RealHowTo    10 年前

    马科斯是对的,但你还有几个其他选择。首先,有 是 或者:

    assertThat(result, either(is(1)).or(is(2)));
    

    但如果你有两个以上的项目,它可能会变得笨重。另外,打字员有时会对这样的事情感到奇怪。对于您的情况,您可以:

    assertThat(result, isOneOf(1, 2, 3))
    

    assertThat(result, isIn(theCollection))
    

    另见 Javadoc .