java断言为null或是特定类的实例
我想很简单
Assert.assertThat(
iterator.next(),
Matchers.either(Matchers.nullValue()).or(
Matchers.instanceOf(Double.class)));
因此,我想ensre next()返回两个值中的一个,NULL或Double的实例。 类似
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
为什么??如何修复
编辑
你是对的,和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,并且测试失败
# 1 楼答案
NoSuchMethodError
表示编译时和运行时环境之间的差异问题。一个典型的原因是运行时JAR的版本不同。也许你有两个Hamcrest罐子,但一个优先。仔细检查编译时和运行时类路径# 2 楼答案
我建议您对Hamcrest的多个依赖项存在冲突。检查构建路径/maven依赖关系
如果在
java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch
上执行搜索,您将获得完全相同问题的以下条目列表:Did you search before posting this question?
第一个结果在我看来是正确的:
First search result