2016-03-07 8 views
5

Wir verwenden Autofac.Extras.Moq.AutoMock. Jetzt habe ich eine Konstruktor Abhängigkeit Faul mit <>Wie können Sie Lazy <> mit AutoMock (Moq) verwenden

public MyService(Lazy<IDependency> myLazyDependency) {...} 

MyService wir die Lazy<Dependency> verspotten müssen zu testen.

Ich versuche, dies mit

[ClassInitialize] 
public static void Init(TestContext context) 
{ 
    autoMock = AutoMock.GetLoose(); 
} 

[TestInitialize] 
public void MyTestInitialize() 
{ 
    var myDepMock = autoMock.Mock<Lazy<IDependency>>(); // <-- throws exception 
} 

Dies ist die Ausnahme von der Testläufer zurückgegeben:

Initialisierungsmethode Tests.MyServiceTests.MyTestInitialize Ausnahme ausgelöst hat. System.InvalidCastException: System.InvalidCastException: Kann nicht das Objekt von Typ 'System.Lazy 1[IDependency]' to type 'Moq.IMocked 1 [System.Lazy`1 [IDependency]]' ..

Also, wie kann ich passiere ein < Faul> verspottet-Objekt Automock.

+0

Warum nicht "IDdependency" vortäuschen, und dann "new Lazy (mockedObj)" übergeben (oder wie auch immer es gebaut wird - ich habe es vergessen)? Es gibt keinen Grund, 'Lazy' zu verspotten, Sie testen das Systemframework nicht. – Rob

+0

Gute Idee, aber ich kann es nicht zur Arbeit bringen. Sie müssen ein Lambda übergeben. MockedObj wird nicht akzeptiert. – dampee

+0

Dann pass etwas wie 'new Lazy ((=) = mockedObj)' :) – Rob

Antwort

6

Sie müssen nicht Lazy Mock, wie es Teil des Rahmens ist (abgesehen von einigen extremen Umständen). Sie können einfach IDependency überspielen und das verspottete Objekt an Lazy übergeben.

So etwas sollte funktionieren:

var mockDependency = autoMock.Mock<IDependency>(); 
var mockObject = mockDependency.Object; //(Not entirely sure of the property for this library) 
var mockedLazy = new Lazy<IDependency>(() => mockObject); 

Beachten Sie, dass dies bedeuten Lazy wird im Wesentlichen nichts für Ihre Tests tun (wenn das ein Problem) - es wird einfach die bereits erstellt Mock zurück, wenn es zuerst benutzt, um

+1

Für die Interessierten habe ich eine ähnliche Antwort von den Automock Jungs bekommen: https://github.com/autofac/Autofac.Extras.Moq/issues/3 – dampee

Verwandte Themen