¿Es correcto que los stubs y burlas de Rhino Mocks solo sirvan para interfaces, no para clases concretas? Pasé bastante tiempo tratando de hacer funcionar este código. No esperaba que el trobado pubSubClient llamara siempre al método Send de la clase. Ese método tiene algunas dependencias y arroja una excepción.Los trozos y burlas de Rhino Mocks solo son buenos para las interfaces?
[Test]
public void Test01()
{
PubSubMessage psm = new PubSubMessage();
var pubSubClient = MockRepository.GenerateStub<PubSubClient>();
pubSubClient.Stub(x => x.Send(psm)).IgnoreArguments().Return(null);
// actual PubSubClient Send method throws exception
// the rest of the test is skipped...
}
Sin embargo, cuando he extraído la interfaz y ejecutar la misma prueba con IPubSubClient, parece estar funcionando como se esperaba.
¿Significa que tengo que extraer la interfaz para cada clase que quiera simular/resguardar con Rhino? ¿O me falta algo, técnica o conceptualmente?
ACTUALIZACIÓN: OK, parece que me di cuenta de lo que me estaba perdiendo parte: burla de Rhino no puede interceptar las llamadas a métodos no virtuales. Entonces, supongo que tengo interfaces de uso o hago que todos los métodos de la clase concreta sean virtuales. Por favor corrígeme si hay otra opción.
Si declara que las burlas parciales no son para algo, es más útil decir para qué son en su respuesta. Los simulacros parciales tienen la intención de burlarse solo de Parte de una clase, esto los hace prácticos (y necesarios) para burlarse de una clase de Resumen donde un simulacro normal no puede manejar esto. Esto permite la prueba de métodos abstractos. Un simulacro parcial (al menos en Rhino) se burlará de cualquier clase y no está restringido a las clases abstractas, tenga en cuenta, sin embargo, si hay un código de implementación que se invocará en el momento de la devolución. –
(alerta de necro): ¡Acabo de descubrir que tu clase ni siquiera necesita ser abstracta para que los métodos sean virtuales! Una cosa tan pequeña, pero nunca la he considerado antes :-) – Heliac