En los frameworks burlones, puedes burlarte de un objeto o espiarlo . ¿Cuál es la diferencia entre los dos y cuándo usaría / debería usar uno sobre el otro?
Al observar a Mockito , por ejemplo, veo que se hacen cosas similares usando espías y simulacros , pero no estoy seguro de la distinción entre los dos.
unit-testing
mocking
tdd
Vivin Paliath
fuente
fuente
Respuestas:
El objeto simulado reemplaza completamente la clase simulada, devolviendo valores grabados o predeterminados. Puede crear simulacros de "aire fino". Esto es lo que se usa principalmente durante las pruebas unitarias.
Cuando espías, tomas un objeto existente y "reemplazas" solo algunos métodos. Esto es útil cuando tienes una gran clase y solo quieres burlarte de ciertos métodos (burla parcial). Permítanme citar la documentación de Mockito :
En caso de duda, use simulacros.
fuente
Mockito advierte que la burla parcial no es una buena práctica y debe revisar su arquitectura orientada a objetos. Se recomienda espiar (o burla parcial) para probar el código heredado .
fuente
Trataré de explicar usando un ejemplo aquí:
Aquí, teníamos un objeto real inicial
list
, en el que agregamos un elemento y esperamos que el tamaño sea uno.Nos espía significado objeto real que podemos instruir a qué método se apagó . Por lo tanto, declaramos que aplicamos el método,
size()
en un objeto espía que devolverá 10, sin importar el tamaño real.En pocas palabras, espiarás objetos reales y tropezarás con algunos de los métodos .
fuente
Referencia: http://javapointers.com/tutorial/difference-between-spy-and-mock-in-mockito/
Cuando se utilizan objetos simulados, el comportamiento predeterminado del método cuando no es stub es no hacer nada. Simple significa que si es un método nulo, no hará nada cuando llame al método o si es un método con un retorno, entonces puede devolver un valor nulo, vacío o predeterminado.
Mientras está en objetos espía, por supuesto, dado que es un método real, cuando no está tropezando con el método, llamará al comportamiento real del método. Si desea cambiar y burlarse del método, entonces debe tropezarlo.
fuente
Las burlas no son trozos de Martin Fowler
fuente
Los espías tienen dos definiciones. Uno, es donde se llama al método real, otro donde no se llama a ninguna funcionalidad y solo se devuelven valores nulos o equivalentes nulos, pero se llamaron a los métodos y se registró su estado, comúnmente, como el método x se llamó y veces.
fuente
En Mockito, si asigna cualquier objeto a la variable de instancia de Mock Object, entonces no afecta a Mock Object.
Pero en el caso de Spy, si asigna cualquier objeto a una variable de instancia de Spy Object, entonces sí afecta a Spy Object debido a que Spy actúa como una modificación de objeto en tiempo real.
Para un ejemplo de referencia son
fuente