【问题标题】:Using GreedyConstructorQuery and AutoMoqCustomization does use greediest constructor and inject dependency使用 GreedyConstructorQuery 和 AutoMoqCustomization 确实使用了最贪婪的构造函数并注入依赖项
【发布时间】:2014-09-06 12:56:57
【问题描述】:

我正在使用带 Moq 的 Autofixture 将 Moq 注入我的 sut。

我有以下带有构造函数的类:

public class Dummy{

  public Dummy(){

  }

  public Dummy(IDummyData data){

  }
}

我已经在我的 xUnit 测试中使用 AutoMoqCustomizationGreedyConstructorQuery 配置了 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 将为注入到我的 sut 中的接口 IDummyData 创建一个 Mock。

那么我的设置不正确吗?我的期望错了吗?我需要先创建一个 Mock 并在我的 Fixture 上注册它吗?

【问题讨论】:

    标签: c# moq autofixture


    【解决方案1】:

    解决方案是 RTFM。

    使用Build&lt;T&gt;().Create() 轮流进行所有自定义。解决方法是直接在fixture上使用Create&lt;T&gt;()创建Dummy的实例。

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

    【讨论】:

    • +1 是的,在这种情况下,这是自定义Fixture 实例的正确方法。 (FWIW,您也可以使用CompositeCustomization,而不是两次使用Customize 方法。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多