Bogus - Faker 随机选择自定义类型

Bogus - Faker to pick a random custom type

有这个:

        var SampleNames = new PersianName[] {
            new XName("Sara","Dianov"),
            new XName("Eliza","Raas"),
            new XName("Robert","Smith")
        };

        var theFaker = new Faker<Architect>()
        .RuleFor(h => h.User.NameBundle, f => f.PickRandom(SampleNames))

得到这个错误:

Error: System.ArgumentException: 
Your expression 'h.User.NameBundle' cant be used. 
Nested accessors like 'o => o.NestedObject.Foo' at a parent level are not allowed.
 You should create a dedicated faker for NestedObject like new Faker<NestedObject>().RuleFor(o => o.Foo, ...)
 with its own rules that define how 'Foo' is generated.
 See this GitHub issue for more info: https://github.com/bchavez/Bogus/issues/115

我该如何解决这个问题?已阅读错误消息中提供的 link ,顺便说一句,我还无法解决它。 我想为 h.User.NameBundle 分配一个随机的 XName 元素,如果我真的需要这里的第二个伪造者并且不确定我如何使用单独的伪造者来实现这个。

您可以为嵌套类型使用另一个 faker。然后你可以像这样 .RuleFor(h => h.User, () => userFaker) 在另一个 faker 中引用它。这是一个示例:

var samples = new Name[] 
{
    new Name { FistName = "Sara", LastName = "Dianov" },
    new Name { FistName = "Eliza", LastName = "Raas" },
    new Name { FistName = "Robert", LastName = "Smith" }
};

var userFaker = new Faker<User>()
    .RuleFor(h => h.Name, f => f.PickRandom(samples));

var someClassFaker = new Faker<SomeClassWithPropUser>()
    .RuleFor(h => h.User, () => userFaker);