我正在尝试创建一个对象列表,这些对象的数据存在一些差异。诸如字符串之类的类型很好,因为它们每次都是随机的,但是我发现在由CreateMany()生成的集合中的每个对象中,布尔值始终是相同的值。
示例类,为演示起见:
public class FooBar
{
public string Name { get; set; }
public bool IsFoo { get; set; }
public bool IsBar { get; set; }
}
var fooBars = new Fixture().Build<FooBar>().CreateMany(5).ToList();
// Result
fooBars[0].IsFoo; // true
fooBars[1].IsFoo; // true
fooBars[2].IsFoo; // true
...
可以实现以下目标吗?
// Wanted result
fooBars[0].IsFoo; // true
fooBars[1].IsFoo; // false
fooBars[2].IsFoo; // true
fooBars[3].IsFoo; // false
...
干杯!
最佳答案
AutoFixture确实为您提供了交替的布尔值,但是您在这里遇到的是共鸣效果,因为您还具有IsBar
属性。对于创建的每个FooBar
实例,AutoFixture将在true
和false
之间交替,因此始终将IsFoo
设置为true
,并且将IsBar
设置为false
。
确定性交替可能不是这种情况的最佳选择。随机化布尔值可能会更好。一种方法是这样的:
var r = new Random();
fixture.Register<bool>(() => r.NextDouble() < 0.5);