5

当我使用“with”方法设置属性时,它会将同名的嵌套对象上的所有属性都保留为空。

(我使用 autofixture 的最新版本为 3.0.8)

public class Something {
    public string Id { get; set; }
    public IList<Something> Things { get; set; }
}

var obj = Fixture.Build<Something>().With(q => q.Id, "something").CreateAnonymous()

在这种情况下,obj.Id == "something" 等于 true,但 obj.Things[0].Id == null 也等于 true。

我认为有错误或我弄错了;有人可以帮忙吗?

4

1 回答 1

17

默认情况下,AutoFixture 不会创建 的实例,Something因为图形包含循环引用。

您可以做的是在Fixture实例上添加/删除适当的行为:

fixture.Behaviors.Remove(new ThrowingRecursionBehavior());
fixture.Behaviors.Add(new OmitOnRecursionBehavior());

您现在可以创建一个实例,Something但是Things现在省略了该属性(循环引用)。

这就是为什么你得到一个空列表..

但是,您可以进一步自定义创建算法:

var obj = fixture.Build<Something>()
    .With(x => x.Id, 
        "something")
    .With(x => x.Things, 
        fixture.CreateMany<Something>().ToList())
    .Create();
于 2013-05-06T08:00:00.453 回答