有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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,并且测试失败


共 (2) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

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

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

    Did you search before posting this question?

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

    First search result