Этот небольшой тест здесь:
[TestClass]
public class TreeXTests
{
[TestMethod]
public void ShouldCreateSmallTree()
{
// Arrange
var fixture = new Fixture();
fixture.Behaviors.Add(new OmitOnRecursionBehavior(3));
fixture.Behaviors.OfType<ThrowingRecursionBehavior>().ToList()
.ForEach(b => fixture.Behaviors.Remove(b));
// Act
var em = fixture.Create<TreeX>();
// Assert
em.Should().NotBeNull();
}
}
Работает нормально, когда у меня есть классы, определенные следующим образом:
class TreeX
{
public MetaX MetaX { get; set; }
public IReadOnlyList<TreeX> Children { get; set; }
public TreeX OtherTreePointer { get; set; }
}
class MetaX
{
public int A { get; set; }
}
Но когда я добавляю конструкторы и удаляю открытые сеттеры:
class TreeX
{
public TreeX(MetaX metaX, IReadOnlyList<TreeX> children, TreeX otherTreePointer = null)
{
MetaX = metaX;
Children = children;
OtherTreePointer = otherTreePointer;
}
public MetaX MetaX { get; }
public IReadOnlyList<TreeX> Children { get; }
public TreeX OtherTreePointer { get; }
}
class MetaX
{
public MetaX(int a)
{
A = a;
}
public int A { get; }
}
Сбой из-за следующей ошибки:
AutoFixture.ObjectCreationExceptionWithPath: AutoFixture не удалось создать экземпляр из TreeX, скорее всего, потому что у него нет открытого конструктора, является абстрактным или неоткрытый тип.
Что не очень полезно.
Также я обнаружил, что если я удаляю OtherTreePointer
из TreeX
, тогда он снова работает:
class TreeX
{
public TreeX(MetaX metaX, IReadOnlyList<TreeX> children)
{
MetaX = metaX;
Children = children;
}
public MetaX MetaX { get; }
public IReadOnlyList<TreeX> Children { get; }
}
... но мне действительно нужно OtherTreePointer
. Я не хочу переделывать свои классы, и неизменность обязательна.
Я не уверен, является ли это проблемой с библиотекой, но если нет, то как я могу заставить ее работать?
Спасибо.