tdd - RhinoMock: Mocks Vs StrictMocks Vs DynamicMocks
rhino-mocks mocking (2)
Entiendo la diferencia entre un Mock y un Stub.
Pero los diferentes tipos de Mocks en RhinoMock me confunden.
¿Alguien podría explicar los conceptos de Mocks Vs StrictMocks Vs DynamicMocks en términos de RhinoMock framework?
Sus respuestas son muy apreciadas.
Muy en desacuerdo sobre este punto.
Podría decirse que el desarrollo basado en pruebas no es posible mediante simulacros dinámicos, porque lo que estás probando no es necesariamente lo que estás implementando.
Imagina que agregaste un bucle foreach donde hiciste una llamada db dentro del bucle. Esto se escala muy mal. Si utilizara simulacros dinámicos para simular sus dependencias, posiblemente no se burlaría de las llamadas a la base de datos, por lo tanto, perdería el problema de escalabilidad porque no tendría que burlarse estrictamente de todas las llamadas de la base de datos.
public void myMethod()
{
externalMethod1.doSomething();
foreach()
{
externalDbCall.doSql();
}
}
public void testMyMethodWithDynamicMocksPassesAndMissesDbCallInLoop()
{
expect(externalMethod1.doSomething();
}
public void testMyMethodWithStrictMocksFailsAndHighlightsDbCallInLoop()
{
expect(externalMethod1.doSomething();
}
Un simulacro estricto es un simulacro que generará una excepción si intenta utilizar cualquier método que no se haya configurado explícitamente para ser utilizado.
Un simulacro dinámico (o suelto) no generará una excepción si intenta utilizar un método que no está configurado, simplemente devolverá un valor predeterminado nulo al método y continuará.
Es muy recomendable utilizar simulacros dinámicos, ya que los simulacros estrictos generalmente resultan ser una pesadilla de mantenimiento. Aquí hay una buena publicación de blog que tiene un ejemplo de código de estricto frente a dinámico, y por qué las burlas estrictas suelen ser una mala idea.