如何用伪造的值表示可为空的值?
how to represent nullable values with bogus?
有一个 beautiful library 为 DTO 生成 random/pseudo-random 值。
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))
我们如何表示可空值?
快速浏览似乎表明您只需要在尝试为给定类型的所有 field/properties 提供单个规则时使用 RuleForType
。
我认为 RuleForType
的问题是您没有传递 return 正确类型的 lambda。作为第一个参数的类型必须匹配 lambda 的 return 类型。使用
.RuleForType(typeof(int?), f => (int?)f.Random.Number(10, 1000))
如果您需要一些可能的空值,请选择一个百分比和 return 偶尔为空:
.RuleForType(typeof(int?), f => (f.Random.Number(1,10) == 1 ? (int?)null : f.Random.Number(10, 1000)))
Bogus has a .OrNull()
/.OrDefault()
extension methods in the 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();
希望对您有所帮助!
谢谢,
布莱恩
有一个 beautiful library 为 DTO 生成 random/pseudo-random 值。
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))
我们如何表示可空值?
快速浏览似乎表明您只需要在尝试为给定类型的所有 field/properties 提供单个规则时使用 RuleForType
。
我认为 RuleForType
的问题是您没有传递 return 正确类型的 lambda。作为第一个参数的类型必须匹配 lambda 的 return 类型。使用
.RuleForType(typeof(int?), f => (int?)f.Random.Number(10, 1000))
如果您需要一些可能的空值,请选择一个百分比和 return 偶尔为空:
.RuleForType(typeof(int?), f => (f.Random.Number(1,10) == 1 ? (int?)null : f.Random.Number(10, 1000)))
Bogus has a .OrNull()
/.OrDefault()
extension methods in the 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();
希望对您有所帮助!
谢谢,
布莱恩