Как представить обнуляемые значения с поддельным?
Есть красивая библиотека, которая генерирует случайные / псевдослучайные значения для 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))
Как мы представляем обнуляемые?
2 ответа
Быстрое прочтение указывает на то, что вам нужно только использовать RuleForType
когда вы пытаетесь предоставить единое правило для всех полей / свойств данного типа.
Я думаю, что ваша проблема с RuleForType
это вы не переходили в лямбду, которая возвращала правильный тип. Тип в качестве первого параметра должен соответствовать возвращаемому типу лямбды. использование
.RuleForType(typeof(int?), f => (int?)f.Random.Number(10, 1000))
Если вам нужна некоторая возможность нулевых значений, выберите процент и иногда возвращайте нулевое значение:
.RuleForType(typeof(int?), f => (f.Random.Number(1,10) == 1 ? (int?)null : f.Random.Number(10, 1000)))
Богус имеет .OrNull()
/ .OrDefault()
методы расширения в Bogus.Extensions
Пространство имен.
Для генерации случайных значений 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();
Надеюсь, это поможет!
Спасибо,
Брайан