0

シンプルに思った

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

したがって、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 との衝突がありました。私はそれを修正しました。エラーはありませんが、アサーションが奇妙に失敗します。見てください:

 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 を取得し、テストが失敗しています。

4

2 に答える 2

2

NoSuchMethodError、コンパイル時環境と実行時環境の違いに関する問題を示しています。典型的な原因は、実行時に異なるバージョンの JAR を持っていることです。2 つの Hamcrest JAR があるかもしれませんが、1 つが優先されます。コンパイル時および実行時のクラスパスを注意深く確認してください。

于 2012-11-30T11:55:28.490 に答える
2

競合している Hamcrest の依存関係が複数あることをお勧めします。ビルド パス / Maven の依存関係を確認してください。

で検索を実行するjava.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatchと、まったく同じ問題のエントリの次のリストが表示されます。

この質問を投稿する前に検索しましたか?

最初の結果は私には正しいように見えます:

最初の検索結果

于 2012-11-30T11:55:31.737 に答える