断言、为 null 或特定类的实例



我认为很简单

 Assert.assertThat(
                iterator.next(),
                Matchers.either(Matchers.nullValue()).or(
                        Matchers.instanceOf(Double.class)));

所以我想 ensre next() 返回两个、NULL 或双精度实例之一。喜欢

Assert.assertTrue(next == null || next instanceof Double);

测试运行(assertThat)结果...

 java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch(Ljava/lang/Object;Lorg/hamcrest/Description;)V
at org.hamcrest.core.CombinableMatcher.matchesSafely(CombinableMatcher.java:17)
at org.hamcrest.TypeSafeDiagnosingMatcher.matches(TypeSafeDiagnosingMatcher.java:55)
at org.junit.Assert.assertThat(Assert.java:772)
at org.junit.Assert.assertThat(Assert.java:738

为什么?以及如何解决?

编辑

你是对的,与来自莫基托的哈姆克雷斯特库发生了碰撞。我已经修好了。没有错误,但断言奇怪地失败了,看看:

 java.lang.AssertionError: 
 Expected: (null or an instance of java.lang.Double)
 got: null
at org.junit.Assert.assertThat(Assert.java:780)
at org.junit.Assert.assertThat(Assert.java:738)
预期为空,

但为空,测试失败。

NoSuchMethodError表示有关编译时和运行时环境之间的差异的问题。一个典型的原因是您在运行时具有不同版本的 JAR。也许您有两个Hamcrest JAR,但其中一个优先。仔细检查编译时和运行时类路径。

我建议你有多个冲突的Hamcrest依赖项。检查您的构建路径/maven依赖项。

如果对java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch执行搜索,您将获得以下完全相同问题的条目列表:

您在发布此问题之前是否搜索过?

第一个结果对我来说是正确的:

第一个搜索结果

最新更新