2017-12-27 268 views
-1

有一个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)); 

要创建一个整型的规则很简单:

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

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

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

public class ObjectWithNullables 
{ 

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

我们不能建立像这样:

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

我们如何代表nullables?

+0

会发生什么事,当你尝试你的榜样'RuleForType'?您是否阅读过文档? – NetMage

回答

3

当您试图为给定类型的所有字段/属性提供单个规则时,快速阅读似乎表明您只需要使用RuleForType

我认为你的问题与RuleForType是你没有通过一个lambda返回正确的类型。作为第一个参数的类型必须与lambda的返回类型相匹配。使用

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

如果您需要空值的一些可能性,选择一个百分比,并返回null偶尔:

.RuleForType(typeof(int?), f => (f.Random.Number(1,10) == 1 ? (int?)null : f.Random.Number(10, 1000))) 
+0

但是这不会返回给定属性的'null'值(假设它甚至可以工作),所以这样的实现不是很好,因为null是有效的值。 – Evk

+0

现在你完全问了一个不同的问题。答复修改。 – NetMage