【问题标题】:Is there an Autofixture attribute that can be used instead of fixture.Inject() in the code?代码中是否可以使用 Autofixture 属性来代替 fixture.Inject() ?
【发布时间】:2016-12-21 02:19:24
【问题描述】:

我正在针对 Entity Framework 6 存储库创建测试。由于产品类型和贷款之间存在依赖性,使用 Autofixture.AutoMoq 时出现循环引用错误。是否有一个属性可以放在测试方法上,这样我就可以消除以下代码行(以及下面示例中的相关项):"fixture.Inject(Enumerable.Empty<Loan>());"

我正在使用 XUnit 2.1.0.3179、Autofixture 3.50.2.0、Autofixutre.AutoMoq 3.50.2.0、AutoFixture.Xnit2、Moq 4.5.29.0

这里有一些额外的细节,可能会有所帮助...

贷款(N) --- (1) 产品类型

由于我的 EF6 模型中的循环引用,我无法执行以下操作:

[Theory, AutoMoqData]
public void ProductTypes_GetList()
    List<ProductType> productTypeList,
    [Frozen] Mock<IProductTypeRepository> productTypeRepo)
{

相反,我必须执行以下操作以避免循环引用问题:

   var fixture = new Fixture().Customize(new AutoMoqCustomization());
    // Avoid circular dependency in EF.  
    // Eliminating the many side of the relationship.
    fixture.Inject(Enumerable.Empty<Loan>());

    var productTypeRepo = fixture.Freeze<Mock<IProductTypeRepository>>();

    // Create a list of product types.
    List<ProductType> productTypeList = fixture.Create<List<ProductType>>();

    productTypeRepo.Setup(_ => _.GetAll()).Returns(productTypeList);

我希望了解是否有可能实现我的目标并减少代码行数。

提前感谢您的时间和建议。

迈克

【问题讨论】:

    标签: entity-framework moq xunit autofixture


    【解决方案1】:

    您可以使用自定义来执行此操作,并将您自己的自定义包装到属性中..

    这是一个自定义示例:

    fixture.Customize<ProductType>(x => x.Without(y => y.ProductTypes));
    

    您可以将自定义封装到一个实现 ICustomization 的类中,最后按照 Mark Seemann 在 Encapsulating AutoFixture Customizations 中的指导,您可以将所有这些封装到一个属性中,这样您就可以做到:

    [Theory, AutoMoqData, MyCustomizations]
    public void ProductTypes_GetList()
    

    【讨论】:

      猜你喜欢
      • 2015-05-15
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      • 2016-01-29
      • 2020-08-11
      • 2022-11-28
      • 1970-01-01
      相关资源
      最近更新 更多