mock method injectmocks example java unit-testing arraylist mocking mockito

java - method - mockito verify



mockito ArrayList<String> problema (2)

La alternativa es usar la anotación @Mock, ya que entonces Mockito puede usar el tipo de reflejo para encontrar el tipo genérico:

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); } }

Tengo un método que estoy tratando de probar por unidad. Este método toma un parámetro como ArrayList y hace cosas con él. El simulacro que trato de definir es:

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

que da una advertencia de "desactivación de la casilla de verificación desactivada".

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

me da un error

¿Alguien quiere aclararme lo que estoy haciendo mal?


ArrayList<String>.class es una construcción no admitida por el compilador de Java.

Para el primer intento, debes hacer esto:

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

Esto sucede porque el método mock solo puede devolver un tipo sin formato. En general, no es bueno usar los tipos crudos porque esto puede generar errores de tiempo de ejecución. En tu caso, está perfectamente bien, porque sabes que mocked no es un REAL ArrayList<String> todos modos.

Solo un consejo general acerca de @SuppressWarnings( "unchecked" ) . Intente mantenerlo lo más cerca posible del origen del problema. Por ejemplo, puede ponerlo solo para la declaración de variable, o puede suprimirlo para todo el método. En general, suprímalo para una variable, porque de lo contrario la anotación de método amplio puede suprimir otros problemas en su función.