2014-10-07 26 views
2

我有一個使用案例,我希望AutoFixture使用默認方法構建我的對象,但隨後我想添加一些後處理,因爲有一些屬性需要設置動態地在對象被建立之後。不過,我希望後處理髮生在所有派生自特定類型的對象上。有沒有辦法使用AutoFixture來做到這一點?如何將後建立處理程序添加到AutoFixture

+3

你可以做到這一點[使用後處理(http://stackoverflow.com/a/21569388)。 – 2014-10-07 14:56:38

回答

0

AutoFixture會自動填充可寫屬性,因此您無需執行任何操作即可啓用該屬性。如果您希望以特殊方式處理某些屬性,則可以爲這些屬性定義ISpecimenBuilder,例如,

public class StreetNameBuilder : ISpecimenBuilder 
{ 
    public object Create(object request, ISpecimenContext context) 
    { 
     var pi = request as PropertyInfo; 
     if (pi == null || pi.Name != "StreetName" || pi.PropertyType != typeof(string)) 
      return new NoSpecimen(); 

     return "Baker Street"; // Your custom value goes here. 
    } 
} 

此類助洗劑,註冊時,處理類型string的所有StreetName的屬性,無論在其類屬性被定義。如果要定位從派生自特定基類的類定義的屬性,那麼您也可以檢查pi以獲取該信息。

你需要用Fixture實例來註冊的建設者,例如像這樣:

fixture.Customizations.Add(new StreetNameBuilder()); 
相關問題