簡體   English   中英

如何在AutoMock(Moq)中使用Lazy <>

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM