gpt4 book ai didi

c# - 具有多个相同类型实例的构造函数

转载 作者:行者123 更新时间:2023-11-30 16:42:19 27 4
gpt4 key购买 nike

我有一个类的构造函数是这样的:

MyClass(MySetting, IMyService, IMyService, IMyService)

在这种情况下,如何使用 AutoFixture 创建 MyClass?我知道当它只有一个 IMyService 参数时,我们可以使用 AutoMoq Freeze 模拟,但在这种情况下,我不确定我们是否可以Freeze 三个模拟,因为我认为最后一个将用于所有三个参数。

最佳答案

确实,如果您卡住一个对象,您每次请求它时都会得到相同的对象;这就是 Freeze 的意义所在。

在这种情况下我通常做的是添加 Inspection Properties上课,因为你写了什么,你也可以公开:

public class MyClass
{
public MyClass(
MySetting setting,
IMyService service1,
IMyService service2,
IMyService service3)
{
this.Service1 = service1;
this.Service2 = service2;
this.Service3 = service3;
}

public IMyService Service1 { get; }
public IMyService Service2 { get; }
public IMyService Service3 { get; }

public string DoIt()
{
return
this.Service1.Whatever() +
this.Service2.Whatever() +
this.Service3.Whatever();
}
}

您可以使用 Mock.Get 为每个注入(inject)的服务获取 Mock,如本测试所示:

[Fact]
public void AskTheSut()
{
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var sut = fixture.Create<MyClass>();
Mock.Get(sut.Service1).Setup(s => s.Whatever()).Returns("foo");
Mock.Get(sut.Service2).Setup(s => s.Whatever()).Returns("bar");
Mock.Get(sut.Service3).Setup(s => s.Whatever()).Returns("baz");

var actual = sut.DoIt();

Assert.Equal("foobarbaz", actual);
}

顺便说一句,作为一个设计原则,我认为一个依赖关系很好,两个相同的依赖关系有时也合适,但如果你有三个,你应该考虑使用它们的集合。 (一个,两个,很多...)

关于c# - 具有多个相同类型实例的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47087644/

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