Autofixtures With-Customizations for игнорируются при использовании Build‹T›

Моя цель состоит в том, чтобы иметь возможность определять только те параметры, которые имеют отношение к конкретным тестам, с неизменяемыми типами в С# (строго внедрение конструктора, без сеттеров) и иметь настроенное приспособление, которое позаботится о допустимых значениях для параметров, которые не указано в тесте.

Почесал голову над этим - мои настройки свойства "with" для строк, 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 следующим образом:

        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"). введите здесь описание изображения

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

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


person Julian    schedule 19.01.2017    source источник
comment
См. stackoverflow.com/a/28362898/126014.   -  person Mark Seemann    schedule 20.01.2017
comment
См. также stackoverflow.com/a/20816487/126014   -  person Mark Seemann    schedule 20.01.2017
comment
Спасибо, Марк, и спасибо за вашу прекрасную работу!   -  person Julian    schedule 23.01.2017


Ответы (1)


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

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

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

person Julian    schedule 16.03.2017