gpt4 book ai didi

autofixture - 如何找出 AutoFixture 抛出 Kernel.OmitSpecimen 异常的原因

转载 作者:行者123 更新时间:2023-12-03 17:55:13 33 4
gpt4 key购买 nike

我正在研究一个相当嵌套的模型,它有一些循环引用。它还使用 Entity Framework ,因此所有列表都是 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 : Unable to cast object of type 'Ploeh.AutoFixture.Kernel.OmitSpecimen' to type '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)。

此代码确实运行:

    public class Session
{
public Language Language { get; set; }
}

public class Language
{
public ICollection<Session> Sessions { get; set; }
}

class Program
{
static void Main(string[] args)
{
var fixture = new Fixture();
fixture.Behaviors.Add(new OmitOnRecursionBehavior());

var session = fixture.Create<Session>();

Debug.Assert(session != null, "Session should not be null");
}
}

关于autofixture - 如何找出 AutoFixture 抛出 Kernel.OmitSpecimen 异常的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12531920/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com