2
我有一個使用案例,我希望AutoFixture使用默認方法構建我的對象,但隨後我想添加一些後處理,因爲有一些屬性需要設置動態地在對象被建立之後。不過,我希望後處理髮生在所有派生自特定類型的對象上。有沒有辦法使用AutoFixture來做到這一點?如何將後建立處理程序添加到AutoFixture
我有一個使用案例,我希望AutoFixture使用默認方法構建我的對象,但隨後我想添加一些後處理,因爲有一些屬性需要設置動態地在對象被建立之後。不過,我希望後處理髮生在所有派生自特定類型的對象上。有沒有辦法使用AutoFixture來做到這一點?如何將後建立處理程序添加到AutoFixture
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());
你可以做到這一點[使用後處理(http://stackoverflow.com/a/21569388)。 – 2014-10-07 14:56:38