2010-06-28 4 views
9

Ich versuche einige Moq-Repositories einzurichten, um meinen Dienst mit Castle Windsor als mein IOC zu testen. Mu-Service ist abhängig von IFoo, so dass ich eine moq Instanz schaffen, die IFoo implementiert und es in den Behälter eingespritzt etwa so:Moq mit Windsor verwenden - Objekt des Typs Moq.Mock [IFoo] kann nicht in IFoo konvertiert werden

_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 

dies tun gibt mir eine Ausnahme: System.ArgumentException: Objekt des Typs ‚Moq .Mock`1 [IUserRepository] 'kann nicht in den Typ' IUserRepository 'konvertiert werden

Kann jemand sehen, was ich falsch mache?

Antwort

12

Sie sollten mockUserRepository.Object statt mockUserRepository übergeben.

Dies würde viel deutlicher, wenn man die stark typisierte API verwendet:

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

Dies kompiliert, da die Objekteigenschaft IUserRepository implementiert.

+0

Vielen Dank für den Tipp, es funktioniert perfekt. –

1

Ich fahre das gleiche Problem mit Castle Windsor. A dinamyc Initialisierung mit Methode:

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

nicht funktioniert, bis ich von meiner caslteRepository.config Datei vorinitialisiert Repositories (wie Ihre IUserRepository) entfernt und linken Container „leer“ aus Repositories.

Verwandte Themen