有没有办法从 FakeItEasy 中的 System.Type 对象创建一个假的?如同:
var instance = A.Fake(type);
我尝试为 AutoFac 编写一个假容器,该容器会自动返回所有已解析类型的假容器。我查看了 FakeItEasy 的代码,所有支持它的方法都在内部类后面,但我发现接口 IFakeObjectContainer 看起来很有趣,但实现仍然需要注册我想要的对象。
有没有办法从 FakeItEasy 中的 System.Type 对象创建一个假的?如同:
var instance = A.Fake(type);
我尝试为 AutoFac 编写一个假容器,该容器会自动返回所有已解析类型的假容器。我查看了 FakeItEasy 的代码,所有支持它的方法都在内部类后面,但我发现接口 IFakeObjectContainer 看起来很有趣,但实现仍然需要注册我想要的对象。
从 FakeItEasy 2.1.0 开始(但请考虑升级到最新版本以获得更多功能和更好的错误修复),您可以像这样从 Type 创建一个 fake :
using FakeItEasy.Sdk;
…
object fake = Create.Fake(type);
如果您必须使用早期版本,您可以使用一些基于反射的方法来为 A.Fake() 方法创建方法信息。(因为它是关于自动模拟,所以这应该不是问题)。
这最好使用注册处理程序来完成。您应该研究 AutofacContrib.Moq 如何实现其MoqRegistrationHandler
. 您会看到它实际上是使用泛型方法MockRepository.Create
来制作假实例。为 FakeItEasy 创建一个类似的处理程序应该非常简单。