【发布时间】:2016-06-21 16:25:15
【问题描述】:
我们正在使用 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.Lazy1[IDependency]' to type 'Moq.IMocked1[System.Lazy`1[IDependency]]”的对象..
那么,如何使用 automock 传递 Lazy 模拟对象。
【问题讨论】:
-
为什么不模拟
IDependency,然后传入new Lazy(mockedObj)(或者不管它是内置的——我忘了)?没有理由嘲笑Lazy,你不是在测试系统框架。 -
好主意,但我无法让它工作。您需要传递一个 lambda。不接受 MockedObj。
-
然后传递类似
new Lazy(() => mockedObj):) -
多哈。忘记类型了。它是 Lazy
(() => automockedObject)。非常感谢。如果您将其放入回复中,我会将其标记为答案。
标签: c# moq autofac mstest automocking