2017-12-27 5 views
-1

Es gibt eine beautiful library, die zufällige/pseudozufällige Werte für ein DTO generiert.wie NULL Werte mit gefälschten darstellen?

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)); 

eine Regel für einen int zu erstellen ist einfach:

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

Wie schaffen wir Regeln für die Nullable-Urtyp?

Zum Beispiel, wenn unser Modell hat nullable Ints oder NULL festlegbare deimcals:

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

Wie stellen wir nullables:

public class ObjectWithNullables 
{ 

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

Wir mögen so nicht bauen können?

+0

Was passiert, wenn Sie versuchen, Ihr Beispiel 'RuleForType'? Hast du die Dokumentation gelesen? – NetMage

Antwort

3

Eine schnelle Überprüfung scheint anzuzeigen, dass Sie nur RuleForType verwenden müssen, wenn Sie versuchen, eine einzelne Regel für alle Felder/Eigenschaften eines bestimmten Typs anzugeben.

Ich denke, Ihr Problem mit RuleForType ist, dass Sie nicht in einem Lambda übergeben, die den richtigen Typ zurückgegeben. Der Typ als erster Parameter muss mit dem Rückgabetyp des Lambda übereinstimmen. Verwenden Sie

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

Wenn Sie einige Möglichkeit, NULL-Werte benötigen, wählen Sie einen Prozentsatz und null zurück gelegentlich:

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

Aber dies wird nie 'null' Wert für gegebene Eigenschaft (vorausgesetzt, es wird sogar funktionieren), so eine solche Implementierung ist nicht sehr gut, da null ist ein gültiger Wert. – Evk

+0

Jetzt stellen Sie eine andere Frage insgesamt. Antwort geändert. – NetMage