[英]How can you use Lazy<> with AutoMock (Moq)
我們正在使用Autofac.Extras.Moq.AutoMock。 現在我使用Lazy <>有一個構造函數依賴
public MyService(Lazy<IDependency> myLazyDependency) {...}
要測試MyService
我們需要模擬Lazy<Dependency>
。
我正在嘗試這個
[ClassInitialize]
public static void Init(TestContext context)
{
autoMock = AutoMock.GetLoose();
}
[TestInitialize]
public void MyTestInitialize()
{
var myDepMock = autoMock.Mock<Lazy<IDependency>>(); // <-- throws exception
}
這是測試運行器返回的異常:
初始化方法Tests.MyServiceTests.MyTestInitialize引發異常。 System.InvalidCastException:System.InvalidCastException:無法轉換類型為'System.Lazy 1[IDependency]' to type 'Moq.IMocked
1 [System.Lazy`1 [IDependency]]'..
那么,我如何使用automock傳遞一個Lazy <>模擬對象。
你不需要模擬Lazy
,因為它是框架的一部分(除非某些極端情況)。 您可以簡單地模擬IDependency
並將模擬對象傳遞給Lazy
。
這樣的事情應該有效:
var mockDependency = autoMock.Mock<IDependency>();
var mockObject = mockDependency.Object; //(Not entirely sure of the property for this library)
var mockedLazy = new Lazy<IDependency>(() => mockObject);
請注意,這意味着Lazy
基本上不會對您的測試做任何事情(如果這是一個問題) - 它只會在第一次使用時返回已經創建的模擬
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.