当我遇到以下问题时,我感到震惊:
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源代码的任何问题......
答案 0 :(得分:5)
使用anyOf
anyOf - 匹配任何匹配器匹配,短路(如Java ||)
类似的东西:
assertThat(value, anyOf(equalTo(1), equalTo(2)));
答案 1 :(得分:4)
有一些时间做一些调试。
问题是either()
生成的CombinableMatcher
扩展了TypeSafeDiagnosingMatcher
。后者自动拒绝null。
恕我直言,Matcher
的类型参数实际上只是一个建议而不是一个要求,所以这个超类真的不安全......
编辑:
这是一个错误报告(https://github.com/hamcrest/JavaHamcrest/issues/49)。我想它永远不会得到修复......