AutoFixture не может создать неизменный объект - PullRequest
0 голосов
/ 14 февраля 2020

Я кодирую некоторые тесты, используя 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 при использовании классов наследования?

Спасибо

1 Ответ

0 голосов
/ 18 февраля 2020
...