11

私は大学からサンプルコードを入手し、プロジェクトをインポートして、テストを実行しようとしました: The method assertThat(Integer, Matcher) is ambiguous for the type MyClass

すべての assertThat は同じエラーメッセージで赤くマークされているので、問題を説明する最も単純なテストを作成しようとしました:

import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;

@Test
public void whenAssertThatThenItIsAmbiguous() {
    List<String> list = Arrays.asList("A", "B", "C");
    assertThat(list.size(), is(3));
}

assertThat をスクロールすると、次のメッセージが表示されます。

The method assertThat(Integer, Matcher<Integer>) is ambiguous for the type MyClass

グーグルとスタックオーバーフローを検索しましたが、同じ問題を抱えている人は見つかりませんでした...助けてください。

EDIT1:

解決:

import static org.junit.Assert.*; // この行を削除

4

2 に答える 2

27

org.junit.Assertorg.hamcrest.MatcherAssert宣言の両方assertThat(T, Matcher<T>)。どちらか一方を静的インポートすることを選択しますが、両方をインポートすることはできません。問題はありません。

于 2011-10-31T15:37:25.467 に答える
3

これには2つの一般的な原因があります。それは、修飾されていない静的インポート(import static blah.*)、またはパス上のhamcrestの複数のバージョンです。

長い形式is(equalTo(3))(疑いの余地があります)を使用したり、静的インポートをカリングしたりすることで、それを回避できる場合があります。

どのフレームワークで使用するかも重要です。

于 2011-10-31T15:37:19.847 に答える