Моя цель состоит в том, чтобы иметь возможность определять только те параметры, которые имеют отношение к конкретным тестам, с неизменяемыми типами в С# (строго внедрение конструктора, без сеттеров) и иметь настроенное приспособление, которое позаботится о допустимых значениях для параметров, которые не указано в тесте.
Почесал голову над этим - мои настройки свойства "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>
. Кроме того, я понимаю, что первая настройка свойства «выигрывает», поэтому «перезапись» должна быть помещена перед настройками...
Какие-либо предложения? Я здесь совершенно не при чем, пытаясь забить гвоздь отверткой? Или я просто не вижу здесь чего-то умного и/или очевидного...