Pregunta

Estoy usando la biblioteca Mockito para las pruebas de Java y conseguir de errores en Mockito cuando corro mi prueba. (Estoy usando el IDE NetBeans, en caso de que sea relevante). Por ejemplo, tengo una clase llamada Animal y yo estoy tratando de realizar la siguiente prueba:

@Test
public void mokito_test(){

    Animal mockAnimal = mock(Animal.class);
    Animal testAnimal2 = mockAnimal;

    assertTrue(mockAnimal.equals(testAnimal2));

}

Esta prueba da el error siguiente:

mokito_test caused an ERROR (at org.mockito.internal.creation.jmock.ClassImposterizer.<init>(ClassImposterizer.java:37))
  at org.mockito.internal.creation.jmock.ClassImposterizer.<init>(ClassImposterizer.java:37)
  at org.mockito.internal.util.CreationValidator.validateType(CreationValidator.java:14)
  at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:33)
...etc.

(Hay 11 errores más, incluso en java.net, java.security, java.lang, y sun.misc.)

Sin embargo, si realizo esta prueba con un objeto real en lugar de un objeto burlado, la prueba es exitosa:

@Test
public void animal_test(){

    Animal testAnimal1 = new Animal("bear");
    Animal testAnimal2 = new Animal("bear");

    assertTrue(testAnimal1.equals(testAnimal2));

}

Esta prueba es exitosa.

He descargado el archivo jar Mockito (Mockito-core-1.8.0.jar) en mi directorio del proyecto, y luego hacer referencia a la ruta relativa del archivo jar en la biblioteca de pruebas para este proyecto en particular. Nunca he usado Mockito antes, así que sospecho que mi error tiene algo que ver con mi configuración del sistema. Cualquier ayuda sería muy apreciada! Gracias!

¿Fue útil?

Solución

Mockito tiene algunas dependencias externas sobre objenesis y hamcrest libraryes, línea 37 intentos de construir un objeto de la biblioteca objensis.

Utilice Mockito-all-1.8.jar en su lugar.

Otros consejos

¿Está utilizando Mockito con la prueba junit .. no estaba seguro de lo que estaba tratando de probar .. Después de añadir el archivo JAR necesario (Mockito todo jar), cree una prueba como esta. dado que está utilizando la anotación puede utilizar @Mock para crear un objeto de burla

    @RunWith(MockitoJUnitRunner.class)
    public class AnimalTest {

    @Mock
    private Animal mockAnimal;

    @Test
    public void mokito_test(){

        when(mockAnimal.toString()).thenReturn("Some String");

        String toStringResult = mockAnimal.toString();

        //verify(mockAnimal).toString();  -- to verify toString() method called once on the mock
        assertTrue("Some String".equals(toStringResult);

    }
}

Si su animal uso clase Object C Método B, entonces se burlan del método del objeto C, como se muestra arriba.

La prueba está ejecutando no se prueba nada, ni es tratando de verificar cualquiera de las interacciones. Mocks se utilizan en los sistemas orientados a objetos para especificar cómo los objetos interactúan entre sí - por lo que para comprobar que un objeto le dice a otros objetos para hacer las cosas.

No deben ser utilizados para probar los cálculos, o los cambios de estado en los objetos de valor. Uso de burla en este tipo de pruebas conducen a pruebas frágiles, dado que está duplicando la implementación de subrayando su método.

Así métodos sobre los objetos de valor -. Tales como iguales, hashCode, toString, siempre debe ser probado usando el objeto real

Este proceso se describe muy bien en un libro llamado "Creciendo software orientada a objetos, guiada por pruebas".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top