2010-06-28 13 views
9

Estoy intentando configurar algunos repositorios de Moq para probar mi servicio con Castle Windsor como mi IOC. servicio mu depende de IFoo, por lo que estoy creando una instancia moq que implementa IFoo e inyectarlo en el contenedor de esta manera:Usando Moq con Windsor - Objeto del tipo Moq.Mock [IFoo] no se puede convertir a IFoo

_container.AddComponent("AutoBill", 
    typeof (AutoBillService), typeof (AutoBillService)); 

var mockUserRepository = new Mock<IUserRepository>(); 
var testUser = new User() 
    { 
    FirstName = "TestFirst", 
    LastName = "TestLast", 
    UID=1 
    }; 
mockUserRepository.Setup(repo => repo.GetUser(testUser.UID)) 
    .Returns(testUser); 

_container.Kernel.AddComponentInstance("UserRepository", 
    typeof(IUserRepository), mockUserRepository); 

var service = _container.Resolve<AutoBillService>(); //FAIL 

Hacer esto me da una excepción: System.ArgumentException : Objeto del tipo 'Moq .Mock`1 [IUserRepository] 'no se puede convertir a tipo' IUserRepository '

¿Alguien puede ver lo que estoy haciendo mal?

Respuesta

12

Debe pasar mockUserRepository.Object en lugar de mockUserRepository.

Esto sería mucho más evidente si se ha utilizado la API inflexible:

_container.Register(Component 
    .For<IUserRepository>() 
    .Instance(mockUserRepository.Object)); 

Esto compila porque la propiedad Object implementa IUserRepository.

+0

Muchas gracias por la sugerencia, funciona perfectamente. –

1

Tengo el mismo problema con Castle Windsor. Una inicialización Dinamyc con el método:

container.Register(Component.For<IUserRepository>() 
     .Instance(mockUserRepository.Object)); 

no funcionó hasta que borrar de mis archivos caslteRepository.config repositorios preinicializada (como su IUserRepository) y el contenedor de izquierda "vacía" de repositorios.

Cuestiones relacionadas