我如何找出AutoFixture为何抛出Kernel.OmitSpecimen异常

问题描述 投票:5回答:1

我正在研究一个带有一些循环引用的相当嵌套的模型。它还使用实体框架,因此所有列表均为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']

如果我排除类型SessionLanguage中的集合,则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
1个回答
0
投票

这在AutoFixture的较新版本中有效(例如3.31.3)。

© www.soinside.com 2019 - 2024. All rights reserved.