Mockito ArrayList <String>проблема - PullRequest
28 голосов
/ 27 мая 2010

У меня есть метод, который я пытаюсь провести модульное тестирование. Этот метод принимает параметр в качестве ArrayList и работает с ним. Макет, который я пытаюсь определить:

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

, которое выдает предупреждение [не проверено] непроверенное преобразование.

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

дает мне ошибку.

Кто-нибудь хочет просветить меня о том, что я делаю неправильно?

Ответы [ 2 ]

55 голосов
/ 15 марта 2011

Альтернативой является использование аннотации @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);
  }
}
25 голосов
/ 27 мая 2010

ArrayList<String>.class - это конструкция, не поддерживаемая компилятором Java.

Для первой попытки вы должны сделать следующее:

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

Это происходит потому, что метод mock может возвращать только необработанный тип. В общем случае не рекомендуется использовать необработанные типы, поскольку это может привести к ошибкам во время выполнения. В вашем случае это совершенно нормально, потому что вы знаете, что mocked не является РЕАЛЬНЫМ ArrayList<String>.

Просто общий совет по поводу @SuppressWarnings( "unchecked" ) аннотации. Постарайтесь держать его как можно ближе к источнику проблемы. Например, вы можете поместить его только для объявления переменной, или вы можете подавить его для всего метода. В общем случае подавьте его для переменной, поскольку в противном случае широкая аннотация метода может подавить другие проблемы в вашей функции.

...