你如何使用Lazy<>使用AutoMock(Moq)

时间:2016-03-07 22:20:50

标签: c# moq autofac mstest automocking

我们正在使用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]]'的对象..

那么,我怎样才能传递一个懒惰的&lt;&gt;使用automock模拟对象。

1 个答案:

答案 0 :(得分:5)

你不需要模仿@media screen and (max-device-width: 480px) and (orientation: portrait){ video { display:none } } ,因为它是框架的一部分(除非某些极端情况)。您只需模拟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); 基本上不会对您的测试做任何事情(如果这是一个问题) - 它只会在首次使用时返回已创建的模拟