【问题标题】:Is there any way to create a fake from a System.Type object in FakeItEasy?有没有办法从 FakeItEasy 中的 System.Type 对象创建一个假的?
【发布时间】:2018-06-03 00:49:38
【问题描述】:

有什么方法可以在 FakeItEasy 中从 System.Type 对象创建一个假的?类似于:

var instance = A.Fake(type);

我尝试为 AutoFac 编写一个假容器,该容器会自动返回所有已解析类型的假容器。我查看了 FakeItEasy 的代码,所有支持它的方法都在内部类后面,但我发现接口 IFakeObjectContainer 看起来很有趣,但实现仍然需要注册我想要的对象。

【问题讨论】:

  • 看一眼 FakeItEasy API 就会发现他们不支持这个。但是,我可能是错的。另一种方法是使用 AutofacContrib 中的 AutoMockContainer。

标签: autofac fakeiteasy


【解决方案1】:

从 FakeItEasy 2.1.0 开始(但请考虑升级到最新版本以获得更多功能和更好的错误修复),您可以像这样create a fake from a Type

using FakeItEasy.Sdk;

…

object fake = Create.Fake(type);

如果您必须使用较早的版本,您可以使用一些基于反射的方法来为 A.Fake() 方法创建方法信息。 (因为它是关于自动模拟,所以这应该不是问题)。

【讨论】:

  • 实际上,你只能支持开箱即用的接口:A.Fake(x => x.Implements(typeof(yourTypeHere)));
  • 我刚刚下载了最新版本的 FakeItEasy,但仍然找不到方法。是否有我遗漏的方法或此功能无法进入此版本?
【解决方案2】:

最好使用注册处理程序来完成。您应该了解 AutofacContrib.Moq 如何实现其MoqRegistrationHandler。您会看到它实际上是使用通用方法MockRepository.Create 来制作假实例。为 FakeItEasy 创建一个类似的处理程序应该非常简单。

【讨论】:

    猜你喜欢
    • 2011-12-09
    • 1970-01-01
    • 2016-06-27
    • 2019-03-02
    • 2020-03-04
    • 1970-01-01
    • 2021-08-14
    • 2013-10-06
    • 1970-01-01
    相关资源
    最近更新 更多