代码中是否有可以代替 fixture.Inject() 的 Autofixture 属性?
Is there an Autofixture attribute that can be used instead of fixture.Inject() in the code?
我正在针对 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);
我希望了解是否可以实现我的目标并减少代码行数。
提前感谢您抽出时间提出建议。
麦克
您可以使用定制来做到这一点,并将您自己的定制包装到一个属性中..
这是一个自定义示例:
fixture.Customize<ProductType>(x => x.Without(y => y.ProductTypes));
您可以将自定义包装到实现 ICustomization
的 class 中,最后按照 Mark Seemann 在 Encapsulating AutoFixture Customizations 中的指导,您可以将它们很好地包装到一个属性中,这样你可以这样做:
[Theory, AutoMoqData, MyCustomizations]
public void ProductTypes_GetList()
我正在针对 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);
我希望了解是否可以实现我的目标并减少代码行数。
提前感谢您抽出时间提出建议。
麦克
您可以使用定制来做到这一点,并将您自己的定制包装到一个属性中..
这是一个自定义示例:
fixture.Customize<ProductType>(x => x.Without(y => y.ProductTypes));
您可以将自定义包装到实现 ICustomization
的 class 中,最后按照 Mark Seemann 在 Encapsulating AutoFixture Customizations 中的指导,您可以将它们很好地包装到一个属性中,这样你可以这样做:
[Theory, AutoMoqData, MyCustomizations]
public void ProductTypes_GetList()