2011-04-20 14 views
5

Si me estoy burlando de una clase, como a continuación, ¿hay alguna manera de obtener la simulación y no anular un método virtual? Sé que puedo simplemente eliminar el modificador virtual, pero en realidad quiero eliminar el comportamiento de este método más adelante.Rhino: clases de imitación y métodos virtuales no predeterminados

En otras palabras, ¿cómo puedo obtener esta prueba a pasar, aparte de eliminar el modificador virtual:

namespace Sandbox { 
    public class classToMock { 
     public int IntProperty { get; set; } 

     public virtual void DoIt() { 
      IntProperty = 1; 
     } 
} 

public class Foo { 
    static void Main(string[] args) { 
     classToMock c = MockRepository.GenerateMock<classToMock>(); 
     c.DoIt(); 

     Assert.AreEqual(1, c.IntProperty); 
     Console.WriteLine("Pass"); 
    } 
} 

}

Respuesta

4

que desee utilizar un partial mock, que sólo anulará el método cuando se crea una expectativa:

classToMock c = MockRepository.GeneratePartialMock<classToMock>(); 
c.DoIt(); 

Assert.AreEqual(1, c.IntProperty); 
+0

funcionó como un encanto - gracias. –

1

veo un par de cosas aquí.

En primer lugar, se está burlando de una clase concreta. En la mayoría/todos los casos, esta es una mala idea, y generalmente indica un defecto en su diseño (en mi humilde opinión). Si es posible, extrae una interfaz y simula eso.

segundo lugar, aunque técnicamente la maqueta es reemplazar el método virtual, puede ser que sea mejor pensar en lo que está haciendo en realidad es burla/falsificar el método proporcionando una implementación (uno que no hace nada en este caso) En general, cuando se burla de un objeto, debe proporcionar la implementación de cada propiedad o método que su caso de prueba requiera del objeto.

Actualización: también, creo que eliminar "virtual" evitará que el framework pueda hacer algo con el método.

Cuestiones relacionadas