c# - 如何用伪造的值表示可为空的值?

标签 c# .net bogus

有一个beautiful library为 DTO 生成随机/伪随机值。

    var fruit = new[] { "apple", "banana", "orange", "strawberry", "kiwi" };

var orderIds = 0;
var testOrders = new Faker<Order>()
    //Ensure all properties have rules. By default, StrictMode is false
    //Set a global policy by using Faker.DefaultStrictMode
    .StrictMode(true)
    //OrderId is deterministic
    .RuleFor(o => o.OrderId, f => orderIds++)
    //Pick some fruit from a basket
    .RuleFor(o => o.Item, f => f.PickRandom(fruit))
    //A random quantity from 1 to 10
    .RuleFor(o => o.Quantity, f => f.Random.Number(1, 10));

为 int 创建规则很简单:

            .RuleForType(typeof(int), f => f.Random.Number(10, 1000))

我们如何为可为空的原始类型创建规则?

例如,如果我们的模型具有可为空的整数或可为空的小数:

public class ObjectWithNullables
{

  public int? mynumber{get;set;}
  public decimal? mydec {get;set;}
}

我们不能这样构造:

.RuleForType(typeof(int?), f => f.Random.Number(10, 1000))

我们如何表示可空值?

最佳答案

BogusBogus.Extensions 中有一个 .OrNull()/.OrDefault() 扩展方法命名空间。

要生成随机 null 的值,请尝试以下操作:

using Bogus.Extensions;

public class ObjectWithNullables
{
   public int? mynumber{get;set;}
   public decimal? mydec {get;set;}
}

var faker = new Faker<ObjectWithNullables>()
            // Generate null 20% of the time.
            .RuleFor(x=> x.mynumber, f=>f.Random.Number(10,1000).OrNull(f, .2f))
            // Generate null 70% of the time.
            .RuleFor(x=>x.mydec, f => f.Random.Decimal(8, 10).OrNull(f, .7f));

faker.Generate(10).Dump();

sample output

希望对您有所帮助!

谢谢,
布莱恩

关于c# - 如何用伪造的值表示可为空的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47997209/

相关文章:

.net - 使用 IDisposable 清理 Excel 互操作对象

.net - 如何在 ASP.NET Web 应用程序中为 Windows Mobile 创建 SQL Compact 3.5 数据库?

c# - 使用 log4net 设置 XmlConfigurator 公共(public)日志记录

c# - System.Net.Mail.SmtpException : Failure sending mail. 无法从传输连接读取数据

.net - 多线程最佳实践

c# - 在Bogus库中为Enum生成假数据

C# Faker Bogus 生成自有属性(property)

c# - 我可以为 Bogus 指定随机种子吗?

c# - 将 List<double> 转换为 object[]

c# - 在 asp.net 中,Repeater 无法使用页面上的 Div 正确触发