1

当使用带有 Create 或 Generate 方法的 AutoBogus 构建器配置时,我似乎无法找到可以提供确定性方式来随机播种的方式。UseSeed 不可用。

例如:

            var orderFaker = AutoFaker.Create(builder => builder.WithOverride(new OrderOverride()));


            orderFaker
            // .UseSeed(<int>) is not available on orderFaker
            .Generate(5);

相似地,

            List<Order> sut = AutoFaker.Generate<Order>(5, 
                builder => builder.WithOverride(new OrderOverride())
            );

我是否遗漏了某些东西,或者它只是在这个级别上不可用?


作为一种解决方法,我的覆盖类只有一个用于应用规则的静态方法,使其适用于覆盖以及实例化AutoFaker<Order>. 这似乎有效,但只是想知道是否有更好的方法......

            Faker<Order> orderFaker = new AutoFaker<Order>().Rules(
                OrderOverride.OrderGenerator);

            List<Order> actual = orderFaker
                // https://github.com/bchavez/Bogus/tree/cc2f894e46be08e3a1521f31b464017666f4f8c7#determinism
                // UseSeed at the faker level ensures consistent output
                .UseSeed(1338)
                .Generate(5)
                .ToList();
    public class OrderOverride : AutoGeneratorOverride
    {
        public override bool CanOverride(AutoGenerateContext context)
        {
            return context.GenerateType == typeof(Order);
        }

        public override void Generate(AutoGenerateOverrideContext context)
        {
            var o = context.Instance as Order;
            var f = context.Faker;

            OrderGenerator(f, o);
        }

        public static void OrderGenerator(Faker f, Order o)
        {
            o.LineItems = new AutoFaker<OrderLineItem>().GenerateBetween(2, 5);
            o.Notes = f.Lorem.Text();
        }

    }
4

0 回答 0