2017-01-19 3 views
0

Моя цель - уметь определять только те параметры, которые имеют отношение к конкретным тестам, с неизменяемыми типами в C# (строго инжектор конструктора, без set'ers) , и у вас есть настроенное приспособление, которое заботится о допустимых значениях параметров, которые не указаны в тесте.Autofixtures «With» -Customizations for игнорируются при использовании Build <T>

Поцарапав мою голову над этим - мои свойства «с» для строк, DateTime и int игнорируются. Пример основан на "Гость":

public class Guest 
{ 
    public readonly string GuestId; 
    public readonly string GivenName; 
    public readonly string SurName; 
    public readonly AgeCode AgeCategory; 

    public Guest(string guestid, AgeCode ageCategory, string givenName, string surName) 
    { 
     AgeCategory = ageCategory; 
     GivenName = givenName; 
     SurName = surName; 
     GuestId = guestid; 
    } 
} 

Я настроить экземпляр Крепеж следующим образом:

 fixture.Customize<Guest>(composer => 
      composer 
       .With(g => g.GivenName, "Finn") 
       .With(g => g.GuestId, "1") 
       .With(g => g.SurName, "Rasmussen") 
      ); 

... Который работает при использовании fixture.Create<Guest>(), но не при использовании fixture.Build<Guest>().With(g=>g.Surname, "Olsen"). enter image description here

Глядя на подписи AutoFixture, я понимаю, что это потому, что Fixture.Build<T>() создает новый композитор, и что композитор не впрыскивается, как «композитор» экземпляр метода Customize<T>. Кроме того - я понимаю, что первая настройка для свойства «выигрывает», поэтому «перезаписывать» нужно было бы нажать перед настройками ...

Любые предложения? Могу ли я полностью отслеживать здесь, пытаясь использовать отвертку, чтобы забить гвоздь? Или я просто не вижу что-то умное и/или здесь очевидна ...

+0

См. Http://stackoverflow.com/a/28362898/126014 –

+0

См. Также http://stackoverflow.com/a/20816487/126014 –

+0

Спасибо, Марк, и благодарю вас за отличную работу! – Julian

ответ

0

Для тех, кто еще найти это: стратегия по умолчанию для построения типа может быть изменен с

Fixture.Register<TType>(Func<TType> creator) 

работает как шарм. ..