0

拥有这个:

        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

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

4

1 回答 1

1

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

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);
于 2021-04-13T18:35:04.070 回答