Cak*_*ter 4 c# testing data-generation bogus
我有一个随机选择选项的规则:
.RuleFor(c=>field, x=>x.PickRandom("Option1", "Option2", "Option3", "Option4"))
Run Code Online (Sandbox Code Playgroud)
使用默认值,我可以更改其中一项的概率。我想设置所有四个项目的概率。选项 1 的概率为 50%,选项 2 的概率为 30%,选项 3 的概率为 15%,选项 4 的概率为 5%。
我想使用 WeightedRandom:
.RuleFor(c=>field, x=>PickWeightedRandom(valueArray, weightArray)
Run Code Online (Sandbox Code Playgroud)
没有像 PickWeightedRandom 这样的方法,但 WeightedRandom 是 Randomizer 类中的一个方法。如何让 WeightedRandom 发挥作用?
编辑:也许是一种扩展方法?
以下似乎有效:
void Main()
{
var items = new []{"kiwi", "orange", "cherry", "apple"};
var weights = new[]{0.1f, 0.1f, 0.2f, 0.6f};
var faveFaker = new Faker<Favorite>()
.RuleFor(x => x.Fruit, f => f.Random.WeightedRandom(items, weights));
faveFaker.Generate(10).Dump();
}
public class Favorite
{
public string Fruit {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
当然,使用 C# 扩展方法始终是扩展 Bogus 以最好地满足您的 API 需求的绝佳方法:
void Main()
{
var faveFaker = new Faker<Favorite>()
.RuleFor(x => x.Fruit, f => f.WeightedRandom( ("kiwi", 0.1f), ("orange", 0.1f),
("cherry", 0.2f), ("apple", 0.6f)) );
faveFaker.Generate(10).Dump();
}
public class Favorite
{
public string Fruit {get;set;}
}
public static class MyExtensionsForBogus
{
public static T WeightedRandom<T>(this Faker f, params (T item, float weight)[] items)
{
var weights = items.Select(i => i.weight).ToArray();
var choices = items.Select(i => i.item).ToArray();
return f.Random.WeightedRandom(choices, weights);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1908 次 |
| 最近记录: |