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.
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
Buona idea, ma non riesco a farlo funzionare. Devi passare un lambda. MockedObj non è accettato. – dampee
Quindi passare qualcosa come 'new Lazy (() => mockedObj)' :) – Rob