gpt4 book ai didi

c# - AutoFixture AutoMoq 将模拟对象转换为接口(interface)

转载 作者:太空宇宙 更新时间:2023-11-03 22:59:56 25 4
gpt4 key购买 nike

希望有人能给我出出主意。

我需要创建一个满足以下条件的模拟对象:

  1. 它实现了 IEntity 接口(interface)。
  2. 它使用我在 EntityBase 中已有的基础实现。
  3. 属性是使用 AutoFixture 自动生成的。

我尝试了几种替代方法,并以这段代码结束:

fixture.Customize(new AutoConfiguredMoqCustomization());

fixture.Customize<IEntity>(c => c.FromFactory(
() => fixture.Create<Mock<EntityBase>>().As<IEntity>().Object));

但是,我得到以下异常:

Mock 类型已经通过访问其 Object 属性进行了初始化。添加接口(interface)必须在此之前完成。 :(

最佳答案

你可以使用 TypeRelay告诉 AutoFixture 对 IEntity 的请求应该通过创建 EntityBase 的实例来满足:

fixture.Customizations.Insert(0, new TypeRelay(typeof(IEntity), typeof(EntityBase)));

现在,每次 AutoFixture 必须创建一个 IEntity 的实例时,它会创建一个 EntityBase 的实例,而后者又将由 Moq 处理,这要归功于AutoConfiguredMoqCustomization

继电器非常方便,有 a few of them内置。事实上,它们通过 relaying 启用了整个自动模拟功能。向模拟库请求接口(interface)和抽象类。

关于c# - AutoFixture AutoMoq 将模拟对象转换为接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43529558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com