2012-02-09 65 views
4

我正在測試一些映射方法的單元,並且我有一個類型爲string的source屬性,它被映射到integer類型的destination屬性。使用AutoFixture爲字符串屬性生成匿名數

所以我想讓AutoFixture爲特定的字符串屬性創建一個匿名整數的源對象,而不是所有的字符串屬性。

這可能嗎?

回答

6

解決這將是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>(); 
+0

感謝名單,我更新了類很少,所以該構造函數將名字的財產作爲參數。因此我也可以在其他地方使用課程。 – Krimson 2012-02-09 10:57:23

+0

@Krimson酷。我很高興我可以幫助:) – 2012-02-09 11:00:28

+1

這在我需要爲特定字符串屬性(而不是基於GUID的默認值)生成有效URL的情況下也很有幫助。 – 2015-02-11 14:36:09

相關問題