4
我正在測試一些映射方法的單元,並且我有一個類型爲string的source屬性,它被映射到integer類型的destination屬性。使用AutoFixture爲字符串屬性生成匿名數
所以我想讓AutoFixture爲特定的字符串屬性創建一個匿名整數的源對象,而不是所有的字符串屬性。
這可能嗎?
我正在測試一些映射方法的單元,並且我有一個類型爲string的source屬性,它被映射到integer類型的destination屬性。使用AutoFixture爲字符串屬性生成匿名數
所以我想讓AutoFixture爲特定的字符串屬性創建一個匿名整數的源對象,而不是所有的字符串屬性。
這可能嗎?
解決這將是create a convention based custom value generator,一個匿名的數字值的字符串表示分配給特定的屬性,基於其名稱的最好方法。
所以,舉個例子,假設你有一個這樣的類:
public class Foo
{
public string StringThatReallyIsANumber { get; set; }
}
自定義值發生器是這樣的:
public class StringThatReallyIsANumberGenerator : ISpecimenBuilder
{
public object Create(object request, ISpecimenContext context)
{
var targetProperty = request as PropertyInfo;
if (targetProperty == null)
{
return new NoSpecimen(request);
}
if (targetProperty.Name != "StringThatReallyIsANumber")
{
return new NoSpecimen(request);
}
var value = context.CreateAnonymous<int>();
return value.ToString();
}
}
這裏的關鍵點是,自定義發電機將只針對屬性StringThatReallyIsANumber
,在這種情況下,我們的約定。
爲了在測試中使用它,您將只需通過Fixture.Customizations
集合將其添加到您的Fixture
實例:
var fixture = new Fixture();
fixture.Customizations.Add(new StringThatReallyIsANumberGenerator());
var anonymousFoo = fixture.CreateAnonymous<Foo>();
感謝名單,我更新了類很少,所以該構造函數將名字的財產作爲參數。因此我也可以在其他地方使用課程。 – Krimson 2012-02-09 10:57:23
@Krimson酷。我很高興我可以幫助:) – 2012-02-09 11:00:28
這在我需要爲特定字符串屬性(而不是基於GUID的默認值)生成有效URL的情況下也很有幫助。 – 2015-02-11 14:36:09