2011-03-02 23 views
28

Realmente no entiendo qué son los Mocks y los Stubs. Quiero saber cuándo, por qué y cómo usamos Mocks en nuestros casos de prueba. Sé que hay buenos frameworks para Mocks y Stubs en Ruby on Rails, pero sin saber el propósito, soy reacio a usarlos en mi aplicación.Mocks and Stubs

¿Puedes aclarar acerca de Mocks and Stubs? Por favor ayuda.

Respuesta

2

Los simulacros se utilizan en las pruebas basadas en la interacción para verificar el comportamiento. Con un simulacro, puede afirmar que el método bajo prueba llamó a otro método. Por ejemplo, me gustaría asegurarme de que un objeto controlador llame a un repositorio para obtener algunos datos.

Los comprobantes se utilizan en las pruebas basadas en el estado para configurar un determinado estado de la aplicación. A diferencia de los simulacros, no te preocupa si la llamada se realizó o no. Por ejemplo, si estaba probando algún código de repositorio, es posible que desee configurar un método de código auxiliar para asegurarse de que el depósito gestiona correctamente el caso cuando se cierra la conexión de la base de datos.

59

Mi respuesta muy simplificada es:

  • burla son objetos que tienen una interfaz similar a algo más
  • talones de son métodos falsos y devolver una respuesta específica

Con ambos estamos tratando de lograr lo mismo: queremos probar una unidad específica (modelo/vista/controlador/módulo) de forma aislada. P.ej. cuando estamos probando el controlador, no queremos probar nuestro modelo, entonces usamos un simulacro. Queremos asegurarnos de que se invoquen los métodos correctos, p. find. Entonces en nuestro simulacro, tenemos un talón que devolverá algo predefinido, sin ir a la base de datos.

Así que probamos las expectativas: los métodos que esperamos que se llamen (en otras unidades), sin realmente llamarlos. La prueba de ese método específico, debería haber sido cubierta en su propia prueba.

+1

increíble explicado! –

+0

Excelente explicación! Estaba luchando con eso, realmente contento de obtenerlo. –

14

De acuerdo con el artículo de Fowler mocks are not stubs, los talones son métodos falsos independientes de las llamadas externas, mientras que los simulacros son objetos falsos con reacciones preprogramadas a las llamadas.

burlarse es más específico y relacionado con el objeto: si se pasan ciertos parámetros, entonces el objeto devuelve ciertos resultados. El comportamiento de un objeto es imitado o "burlado".

Stubbing es más general y está relacionado con el método: un método stubped generalmente devuelve siempre el mismo resultado para todos los parámetros. El comportamiento de un método está congelado, enlatado o "trozado".