上下文
我想创建一个类的集合,但它的一些字符串属性具有约束值。我希望这些值在约束集中仍然是随机的。
我找到了定制的方法,但我的随机生成实现似乎没有使用任何AutoFixture功能,我不想重新发明轮子:
var random = new Random();
var fixture = new Fixture();
fixture.Customize<MyClass>(b => b
.With(i => i.MyProperty, random.Next(2) == 0 ? "O" : "C"));
var result = fixture.CreateMany<MyClass>(1000);
问题
有没有更有效的方法告诉AutoFixture我想要一个随机字符串"O"或"C"?
编辑
同时我意识到上面的代码根本不起作用,所以它不符合"备份"计划的条件。(表达式:random.Next(2(==0?"O":"C"只评估一次(
由于AutoFixture 4.6.0,您可以在With
自定义功能中使用回调。这允许约束字段值,但仍允许其在创建的样本之间变化。
源代码示例:
[Fact]
public void CustomizeMany()
{
var fixture = new Fixture();
var items = fixture.Build<MyClass>()
.With(x => x.EvenNumber, (int number) => number * 2)
.CreateMany(1000)
.ToArray();
Assert.All(items, item => Assert.Equal(0, item.EvenNumber % 2));
}
public class MyClass
{
public int EvenNumber { get; set; }
}
您可以调整样品以满足您的特殊需求。