如何将 Lazy<> 与 AutoMock (Moq) 一起使用
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.Lazy1[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
基本上不会为您的测试做任何事情(如果这是一个问题)- 它只是 return 首次使用时已经创建的模拟
我们正在使用 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.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
基本上不会为您的测试做任何事情(如果这是一个问题)- 它只是 return 首次使用时已经创建的模拟