Estoy haciendo las expectativas ordenadas en los simulacros de rinoceronte según lo descrito por ayende en this publicación. Mi código es como la siguiente:Reutilizando un simulacro verificado
using (_mocks.Ordered())
{
Expect.Call(() => _myMock.CallA());
Expect.Call(() => _myMock.CallB(40));
Expect.Call(() => _myMock.CallA());
}
_mocks.ReplayAll();
_myObjectUnderTest.DoStuff();
_mocks.VerifyAll();
Después de esto me gustaría añadir más expectativas y probar más de los métodos de mi objeto. Quiero hacer esto porque tengo algunos métodos de prueba básicos que configuran mi objeto de prueba, y no quiero tener que volver a probar esa funcionalidad, así que simplemente llamo al método de prueba anterior. Si intento agregar más expectativas después de VerifyAll() recibo una excepción: "Esta acción no es válida cuando el objeto simulado está en estado verificado".
Parte de mi problema es que realmente no entiendo lo que hace todo el material de reproducción/verificación, simplemente copié el código. Estoy usando simulacros estrictos, por lo que cualquier código de configuración debe tener expectativas coincidentes o falla. No quiero duplicar las expectativas para mi código de configuración.
¿Hay alguna manera de reiniciar el simulacro para estar listo para comenzar de nuevo de alguna manera?
El problema viene cuando quiero probar B, pero se debe llamar a A para configurar todo para B primero. Si A llama a métodos en mi simulacro, entonces debo esperarlos o usar simulacros dinámicos en lugar de simulacros estrictos. Me gustaría no duplicar todas las expectativas, porque ya he probado a fondo A. – captncraig
Sí, tengo ese problema también. Tienes dos opciones. El primero es modificar la lógica de su negocio para que pueda controlar qué partes se activan o si divide su lógica comercial en partes más pequeñas que evalúe de manera independiente.La segunda opción es elevar algunas expectativas a un método privado de su '[TestFixture]' y llamar eso en ambas pruebas. Hice el último (por ahora). –
-1 ya que tenía este problema, pero encontré un camino que niega esta respuesta (ver otra publicación - "respuesta corta: sí") – brewmanz