Java 断言为null或是特定类的实例

Java 断言为null或是特定类的实例,java,unit-testing,junit,assertions,hamcrest,Java,Unit Testing,Junit,Assertions,Hamcrest,我想很简单 Assert.assertThat( iterator.next(), Matchers.either(Matchers.nullValue()).or( Matchers.instanceOf(Double.class))); 因此,我想ensre next()返回两个值中的一个,NULL或Double的实例。 类似 测试运行(assertThat)结果在 java

我想很简单

 Assert.assertThat(
                iterator.next(),
                Matchers.either(Matchers.nullValue()).or(
                        Matchers.instanceOf(Double.class)));
因此,我想ensre next()返回两个值中的一个,NULL或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
为什么??如何修复

编辑

你是对的,和Mockito的hamcrest lib comming发生了冲突。我把它修好了。 没有错误,但断言奇怪地失败了,请看:

 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)

应为Null,得到Null,并且测试失败。

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

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

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

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

第一个结果在我看来是正确的:


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

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

第一个结果在我看来是正确的:

可能重复的可能重复的
 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)