dam*_*pee 4 c# mstest moq autofac automocking
我们正在使用Autofac.Extras.Moq.AutoMock.现在我使用Lazy <>有一个构造函数依赖
public MyService(Lazy<IDependency> myLazyDependency) {...}
Run Code Online (Sandbox Code Playgroud)
测试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
}
Run Code Online (Sandbox Code Playgroud)
这是测试运行器返回的异常:
初始化方法Tests.MyServiceTests.MyTestInitialize引发异常.System.InvalidCastException:System.InvalidCastException:无法转换类型为'System.Lazy 1[IDependency]' to type 'Moq.IMocked1 [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);
Run Code Online (Sandbox Code Playgroud)
请注意,这意味着Lazy对您的测试基本上没有任何作用(如果这是一个问题) - 它只会在第一次使用时返回已经创建的模拟