J'ai une méthode que j'essaie de tester par unité. Cette méthode prend un paramètre comme ArrayList et fait les choses avec. La maquette que j'essaie de définir est:
ArrayList<String> mocked = mock(ArrayList.class);
qui donne un avertissement de conversion [non vérifiée] non vérifiée ".
ArrayList<String> mocked = mock(ArrayList<String>.class);
me donne une erreur.
Quelqu'un veut-il m'éclairer sur ce que je fais mal?
L'alternative est d'utiliser l'annotation @Mock puisque Mockito peut alors 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);
}
}
ArrayList<String>.class
Est une construction non prise en charge par Java.
Pour vous essayez d'abord, vous devez faire ceci:
@SuppressWarnings( "unchecked" )
ArrayList<String> mocked = mock(ArrayList.class);
Cela se produit car la méthode mock
ne peut renvoyer qu'un type brut. En général, il n'est pas bon d'utiliser les types bruts car cela peut entraîner des erreurs d'exécution. Dans votre cas, c'est très bien, car vous savez que mocked
n'est pas un VRAI ArrayList<String>
De toute façon.
Juste un conseil général sur l'annotation @SuppressWarnings( "unchecked" )
. Essayez de le garder le plus près possible de la source du problème. Par exemple, vous pouvez le mettre juste pour la déclaration de variable, ou vous pouvez le supprimer pour la méthode entière. 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.