tl;dr
Как правило, AutoFixture не гарантировать, как начальные значения будут использоваться в процессе создания, если вообще будут использоваться. Эта характеристика связана со способом AutoFixture.
Фон
Каждый раз, когда AutoFixture предлагается создать объект определенного Type
, запрос направляется через конвейер объектов под названием "builders". Каждый строитель отвечает за обработку определенного типа запроса (будь то запрос на конкретный тип, интерфейс, свойство, поле и т. д.). Если строитель встречает запрос, который он может обработать, он вернет для него значение, и конвейер перезапустится со следующим запросом.
Учитывая вышеизложенное, если вы хотите создать объект на основе начального числа, все, что может сделать AutoFixture, — это убедиться, что указанное вами начальное значение встраивается в запрос, отправляемый по конвейеру. Затем строители должны решить, что делать с этим значением.
Решение
AutoFixture в настоящее время поставляется с одним компоновщиком, который учитывает начальные значения, и это для строк.
Однако вы можете указать AutoFixture, как он должен использовать начальные значения при создании объектов любого типа, настроив Fixture
специально для этого типа с помощью метод FromSeed
:
var fixture = new Fixture();
fixture.Customize<Foo>(c =>
c.FromSeed(seed =>
{
// return an instance of Foo
// that uses the seed value in some way
}));
Фабрика, которую вы предоставляете FromSeed
, будет вызываться каждый раз, когда AutoFixture должна создать экземпляр Foo
, и ей будет передано начальное значение из Fixture
. Например, учитывая это:
fixture.CreateMany<Foo>(seed: new Foo { Bar = "baz" });
параметр seed
фабричной функции получит начальный объект Foo
, у которого свойство Bar
установлено на "baz"
.
person
Enrico Campidoglio
schedule
12.02.2015