2017-12-27 1179 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