mockito ArrayList problème

J'ai une méthode que j'essaie de tester à l'unité. Cette méthode prend un paramètre comme ArrayList et fait des choses avec. Le simulacre que j'essaie de définir est:

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

Qui donne un avertissement [unchecked] unchecked conversion".

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

Me Donne une erreur.

Quelqu'un veut m'éclairer sur ce que je fais de mal?

27
demandé sur b.roth 2010-05-27 19:09:18

2 réponses

L'alternative est d'utiliser l'annotation @Mockito depuis lors, Mockito peut utiliser la réflexion de type pour trouver le type générique:

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);
  }
}
55
répondu Steve N 2011-03-14 21:12:04

ArrayList<String>.class est une construction non prise en charge par le compilateur Java.

Pour vous d'abord essayer, vous devriez faire ceci:

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

Cela se produit parce que la méthode mock ne peut renvoyer qu'un type brut. En général, il n'est pas bon d'utiliser les types raw car cela peut entraîner des erreurs d'exécution. Dans votre cas, c'est parfaitement bien, parce que vous savez que mocked n'est pas un VRAI ArrayList<String>, de toute façon.

Juste un conseil général sur @SuppressWarnings( "unchecked" ) annotation. Essayez de le garder près de la source du problème que possible. Pour exemple vous pouvez le mettre juste pour la déclaration de variable, ou vous pouvez le supprimer pour toute la méthode. En général, supprimez-le pour une variable, car sinon l'annotation de méthode large peut supprimer d'autres problèmes dans votre fonction.

24
répondu Alexander Pogrebnyak 2010-05-27 15:17:36