【问题标题】:Bogus - Faker to pick a random custom typeBogus - Faker 选择随机的自定义类型
【发布时间】:2021-07-08 19:59:52
【问题描述】:

有这个:

        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

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

【问题讨论】:

    标签: c# bogus


    【解决方案1】:

    您可以为嵌套类型使用另一个伪造者。然后,您可以像 .RuleFor(h =&gt; h.User, () =&gt; 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);
    

    【讨论】:

    • 您好,感谢您的回答,这导致我更改了一些其他构造函数和代码的其他部分,但可能会解决问题,猜测明天将尝试新代码,并将给您回馈。我使用类似方法可能遇到的一个问题是,我使用了这样的第二个 faker:“var nameFaker = new Faker()”,但不知道如何传递它。现在,尽管您的答案可能有效,但通过您的方法,我需要重新管理某些部分。谢谢+1
    • 现在试图使其适应我需要的场景,有这个问题:我可以像这样在父faker的教练中使用childfaker:“.CustomInstantiator(() => userFaker()) “?我知道这是错误的,需要一些小的修复。
    猜你喜欢
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 2020-05-24
    • 2013-03-04
    • 2019-05-08
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    相关资源
    最近更新 更多