2016-03-07 70 views
5

Utilizziamo Autofac.Extras.Moq.AutoMock. Ora ho una dipendenza costruttore utilizzando pigro <>Come utilizzare Lazy <> con AutoMock (Moq)

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

per testare MyService abbiamo bisogno di prendere in giro il Lazy<Dependency>.

sto provando questo con

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

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

questa è l'eccezione restituito dal test runner:

metodo di inizializzazione Tests.MyServiceTests.MyTestInitialize ha gettato un'eccezione. System.InvalidCastException: System.InvalidCastException: Impossibile eseguire il cast oggetto di tipo 'System.Lazy 1[IDependency]' to type 'Moq.IMocked 1 [System.Lazy`1 [IDependency]]' ..

Così, come posso passare un pigro <> oggetto deriso utilizzando automock.

+0

Perché non simulare 'IDependency', e quindi passare in' new Lazy (mockedObj) '(o comunque è costruito - ho dimenticato)? Non c'è motivo di prendere in giro 'Lazy', non stai testando la struttura del sistema. – Rob

+0

Buona idea, ma non riesco a farlo funzionare. Devi passare un lambda. MockedObj non è accettato. – dampee

+0

Quindi passare qualcosa come 'new Lazy (() => mockedObj)' :) – Rob

risposta

6

Non è necessario prendere in giro Lazy, poiché è parte del framework (salvo alcune circostanze estreme). Puoi semplicemente prendere in giro IDependency e passare l'oggetto deriso a Lazy.

Qualcosa del genere dovrebbe funzionare:

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

Si noti che questo significherà Lazy essenzialmente farà nulla per i test (se questo è un problema) - che sarà semplicemente restituire il mock già creato quando viene usato per la prima

+1

Per gli interessati ho ricevuto una risposta simile dai ragazzi automock: https://github.com/autofac/Autofac.Extras.Moq/issues/3 – dampee

Problemi correlati