2011-08-10 14 views
38

He estado usando RhinoMocks por un buen tiempo, pero solo comencé a buscar en Moq. Tengo este problema muy básico, y me sorprende que esto no salga de la caja. Suponga que tengo la siguiente definición de clase:Pasando moq-objects Moq al constructor

public class Foo 
{ 
    private IBar _bar; 
    public Foo(IBar bar) 
    { 
     _bar = bar; 
    } 
    .. 
} 

ahora tengo una prueba en la que necesito para burlarse del IBar que enviar a Foo. En RhinoMocks simplemente me gustaría hacerlo como se indica, y que iba a funcionar simplemente genial:

var mock = MockRepository.GenerateMock<IBar>(); 
var foo = new Foo(mock); 

Sin embargo, esto no parece en Moq a trabajar de la misma manera. Estoy haciendo de la siguiente manera:

var mock = new Mock<IBar>(); 
var foo = new Foo(mock); 

Sin embargo, ahora no - me dice "No se puede convertir de 'Moq.Mock' a 'IBar' ¿Qué estoy haciendo mal ¿Cuál es la forma recomendada de hacer esto.? con Moq?

Respuesta

67

Es necesario pasar a través de la instancia del objeto de la maqueta

var mock = new Mock<IBar>(); 
var foo = new Foo(mock.Object); 

también puede utilizar el objeto simulacro de acceder a los métodos de la instancia.

mock.Object.GetFoo(); 

moq docs

14
var mock = new Mock<IBar>().Object 
+0

+1 por ser tan sólo 10 segundos por detrás de la respuesta que será el aceptado. ¡Gracias! – stiank81

+2

Normalmente, no asignaría la instancia del objeto a una variable como esta, ya que es posible que desee configurar el simulacro para un comportamiento específico. – skyfoot

+0

era solo para mostrar .Object que era la solución al error en tiempo de ejecución que estaba teniendo :-) –

Cuestiones relacionadas