Учитывая два класса:
class Foo
{
...
}
class Bar
{
public Foo FooBar { get; set; }
}
Я установил следующий тест:
void Test()
{
var fixture = new Fixture();
fixture.Customize<Foo>(x => x.FromSeed(TestFooFactory));
var fooWithoutSeed = fixture.Create<Foo>();
var fooWithSeed = fixture.Create<Foo>(new Foo());
var bar = fixture.Create<Bar>(); //error occurs here
}
Foo TestFooFactory(Foo seed)
{
//do something with seed...
return new Foo();
}
Я могу без проблем создавать объекты Foo
напрямую с начальными значениями и без них. Но когда я пытаюсь создать объект Bar
со свойством Foo
, я получаю ObjectCreationException
:
Украшенный ISpecimenBuilder не смог создать экземпляр на основе запроса: Foo. Это может произойти, если запрос представляет интерфейс или абстрактный класс; в этом случае зарегистрируйте ISpecimenBuilder, который может создавать образцы на основе запроса. Если это происходит в строго типизированном выражении сборки, попробуйте указать фабрику с помощью одного из методов IFactoryComposer.
Я ожидаю, что TestFooFactory
будет передано начальное значение null
во время создания Bar
, точно так же, как когда я создал Foo
без начального значения. Я что-то не так делаю, или это может быть баг?
В моем реальном сценарии я хочу настроить, как AutoFixture будет использовать заполненные значения для определенных объектов, когда я передаю заданные значения, но я по-прежнему хочу, чтобы AutoFixture по умолчанию вел себя нормально, если не предоставлено начальное значение.