我正在研究一个相当嵌套的模型,它有一些循环引用。它还使用实体框架,因此所有列表都是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
type中的集合Language
,AutoFixture 会为图中的另一种类型抛出相同的异常。
有没有办法从 AutoFixture 中提取更多信息,例如导致错误的属性?
为什么 AutoFixture 试图将我的类型转换为 OmitSpecimen 以及在此过程中可能发生了什么来阻止它被转换?
我在这里为堆栈跟踪创建了一个要点。
更新
我设法重现了这个问题。给定这对对象
public class Session
{
public Language Language { get; set; }
}
public class Language
{
public ICollection<Session> Sessions { get; set; }
}
调用_fixture.CreateAnonymous<Session>();
将抛出强制转换异常。