30

単体テストをしようとしている方法があります。このメソッドは、パラメーターを ArrayList として受け取り、それを処理します。私が定義しようとしているモックは次のとおりです。

ArrayList<String> mocked = mock(ArrayList.class);

[チェックされていない]チェックされていない変換」という警告が表示されます。

ArrayList<String> mocked = mock(ArrayList<String>.class);

エラーが発生します。

私が間違っていることを教えてくれる人はいますか?

4

2 に答える 2

60

@Mock アノテーションを使用すると、Mockito は型リフレクションを使用してジェネリック型を見つけることができます。

public class MyTest {

  @Mock
  private ArrayList<String> mockArrayList;

  ...

  public void setUp() {
    MockitoAnnotations.initMocks(this);
  }

  public void testMyTest() {
    when(mockArrayList.get(0)).thenReturn("Hello world");

    String result = mockArrayList.get(0);

    assertEquals("Should have the correct string", "Hello world", result);

    verify(mockArrayList).get(0);
  }
}
于 2011-03-14T21:12:04.153 に答える
25

ArrayList<String>.classは Java コンパイラでサポートされていない構造です。

最初に試す場合は、次のようにする必要があります。

@SuppressWarnings( "unchecked" )
ArrayList<String> mocked = mock(ArrayList.class);

これは、mockメソッドが生の型しか返せないために発生します。一般に、実行時エラーが発生する可能性があるため、生の型を使用することは適切ではありません。あなたの場合、とにかくそれmockedがREALではないことを知っているので、それはまったく問題ありませArrayList<String>ん。

@SuppressWarnings( "unchecked" )注釈に関する一般的なアドバイスです。できるだけ問題の原因に近づけるようにしてください。たとえば、変数宣言のためだけに配置することも、メソッド全体でそれを抑制することもできます。一般に、変数に対しては抑制します。そうしないと、広範なメソッド アノテーションによって関数内の他の問題が抑制される可能性があるためです。

于 2010-05-27T15:17:36.700 に答える