使用GreedyConstructorQuery和AutoMoqCustomization确实使用最贪婪的构造函数和注入依赖项

时间:2014-07-16 06:02:42

标签: c# moq autofixture

我正在使用Moof的Autofixture向我的suts注入Moq。

我有以下类与构造函数:

public class Dummy{

  public Dummy(){

  }

  public Dummy(IDummyData data){

  }
}

我已使用AutoMoqCustomizationGreedyConstructorQuery在我的xUnit测试中配置了Fixture,如下所示。

[Fact]
public void ValidLoginShouldReturnAToken()
{
  var fixture = new Fixture()
                             .Customize(new ConstructorCustomization(typeof(Dummy), new GreedyConstructorQuery()))
                             .Customize(new AutoMoqCustomization());

  Dummy sut = fixture.Build<Dummy>().Create();

}

现在的问题是Dummy的实例是使用默认构造函数创建的。我希望实例由具有最多参数的构造函数创建,并且AutoMoq将为接口IDummyData创建一个Mock,将其注入我的sut。

我的设置不正确吗?我的期望是错的吗?我是否需要先创建一个Mock并将其注册到我的Fixture?

1 个答案:

答案 0 :(得分:4)

解决方案是RTFM。

使用Build<T>().Create()次所有自定义设置。解决方案是直接在fixture上使用Create<T>()来创建Dummy

的实例
[Fact]
public void ValidLoginShouldReturnAToken()
{
  var fixture = new Fixture().Customize(new ConstructorCustomization(typeof(Dummy),
                                        new GreedyConstructorQuery()))
                             .Customize(new AutoMoqCustomization());

  Dummy sut = fixture.Create<Dummy>();

}