使用or-or和null或不正确使用的Hamcrest错误?

时间:2015-09-24 10:59:01

标签: java junit hamcrest

当我遇到以下问题时,我感到震惊:

java.lang.AssertionError: 
Expected: (is null or not null)
     but: was null
    at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
    at org.junit.Assert.assertThat(Assert.java:956)
    at org.junit.Assert.assertThat(Assert.java:923)
    at Demo.testName(Demo.java:12)

失败:

ArrayCollection

我不认为这种用法非常不寻常(我实际上是在尝试断言null或空映射)而且我找不到Hamcrest源代码的任何问题......

2 个答案:

答案 0 :(得分:5)

使用anyOf

来自Hamcrest tutorials

  

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

类似的东西:

assertThat(value, anyOf(equalTo(1), equalTo(2)));

答案 1 :(得分:4)

有一些时间做一些调试。

问题是either()生成的CombinableMatcher扩展了TypeSafeDiagnosingMatcher。后者自动拒绝null。

恕我直言,Matcher的类型参数实际上只是一个建议而不是一个要求,所以这个超类真的不安全......

编辑:

这是一个错误报告(https://github.com/hamcrest/JavaHamcrest/issues/49)。我想它永远不会得到修复......