2016-12-21 48 views
2

我正在創建一個實體框架6存儲庫的測試。由於產品類型和貸款之間的依賴關係,使用Autofixture.AutoMoq時會出現循環引用錯誤。是否有一個屬性,我可以放在一個測試方法,所以我可以消除下面的代碼行(和在下面的例子中的相關項目,下面):"fixture.Inject(Enumerable.Empty<Loan>());"是否有一個Autofixture屬性可以用來代替夾具中的fixture.Inject()?

我使用XUnit 2.1.0.3179,Autofixture 3.50.2.0 ,Autofixutre.AutoMoq 3.50.2.0,AutoFixture.Xnit2,起訂量4.5.29.0

這裏有一些額外的細節,它可以是有幫助...

貸款(N)---(1)ProductType

由於在我的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); 

我希望瞭解是否有可能實現我的目標,減少代碼的行數。

預先感謝您的時間和建議。

邁克

回答

2

您可以使用自定義要做到這一點,並且包裹自己的自定義成一個屬性..

繼承人定製的例子:

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

你可以用自定義了實現ICustomization並最終遵循Mark Seemann的Encapsulating AutoFixture Customizations中的指導,您可以將所有這些都很好地包裝到屬性中,以便您可以執行此操作:

[Theory, AutoMoqData, MyCustomizations] 
public void ProductTypes_GetList() 
相關問題