我正在研究一个带有一些循环引用的相当嵌套的模型。它还使用实体框架,因此所有列表均为ICollection<T>
。为了适应这一点,我正在像这样配置AutoFixture:
_fixture = new Fixture().Customize(new MultipleCustomization());
_fixture.Behaviors.Remove(new ThrowingRecursionBehavior());
_fixture.Behaviors.Add(new OmitOnRecursionBehavior());
[当我尝试创建类型时
_fixture.CreateAnonymous<Session>();
AutoFixture有问题,并引发以下错误
System.InvalidCastException:无法将类型为'Ploeh.AutoFixture.Kernel.OmitSpecimen'的对象转换为类型'The.Model.Language']
如果我排除类型Session
的Language
中的集合,则AutoFixture会为图形中的另一种类型抛出相同的异常。
是否有一种方法可以从AutoFixture中提取更多信息,例如引起错误的属性?
为什么AutoFixture试图将我的类型强制转换为OmitSpecimen,在此过程中可能发生什么事情来阻止其强制转换?
我为堆栈跟踪here创建了要点。
我设法重现了这个问题。给定这对对象
public class Session
{
public Language Language { get; set; }
}
public class Language
{
public ICollection<Session> Sessions { get; set; }
}
对_fixture.CreateAnonymous<Session>();
的调用将引发强制转换异常。
这在AutoFixture
的较新版本中有效(例如3.31.3)。