Я кодирую некоторые тесты, используя AutoFixture в C# 8.0, но у меня были проблемы с наследованием классов.
Например, у меня есть эти классы:
public class Parent
{
public Guid Id {get; protected set;}
public int Age {get; protected set;}
public void SetAge(int age)
{
this.Age = age;
}
}
и дочерний класс
public class Child: Parent
{
public string name {get; private set;}
private Child() //I Need this because Migrations
{
}
}
После этого я использую AutoFixture для проверки своего класса:
var fixture = new Fixture();
fixture.Behaviors.Remove(new ThrowingRecursionBehavior());
fixture.Behaviors
.OfType<ThrowingRecursionBehavior>()
.ToList()
.ForEach(b => fixture.Behaviors.Remove(b));
fixture.Register<Parent>(() => null);
fixture.Behaviors.Add(new OmitOnRecursionBehavior(recursionDepth: 3));
fixture.Customize<Child>(c => c.FromFactory(new MethodInvoker(new GreedyConstructorQuery())));
fixture.Customize<Child>(ce => ce.Do(x => x.SetAge(10));
var childObject = fixture.Create<Child>();
и BOOM! Я получаю сообщение об ошибке в тот момент, когда прибор пытается создать объект
"AutoFixture was unable to create an instance from the project, most likely because it has no public constructor, is an abstract or non-public type.
Если я изменяю private для конструктора publi c в классе Child, когда я устанавливаю Age, объект создается пустым , Если я не использую метод SetAge, объект создается без проблем.
У кого-то была эта проблема? Нужно ли мне устанавливать какое-либо свойство в AutoFixture при использовании классов наследования?
Спасибо