2014-06-09 88 views
1

我试图创建一个对象的数据有一些差异的列表。诸如字符串等类型都很好,因为它们每次都是随机的,但是我发现bool在由CreateMany()生成的集合中的每个对象中始终是相同的值。是否可以使用AutoFixture 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 
... 

干杯!

回答

4

AutoFixture 确实给你交布尔值,但你遇到这里是一个共振效果,因为你也有IsBar财产;对于创建的每个实例FooBar,AutoFixture将在truefalse之间交替,因此始终将IsFoo设置为trueIsBarfalse

确定性交替可能不是最适合这种情况。它可能会更好地随机布尔值。一种方法是这样的:

var r = new Random(); 
fixture.Register<bool>(() => r.NextDouble() < 0.5); 
+0

你是说如果在FooBar上有三个布尔值,那么bool值自然会在集合中的每个实例之间切换? – Tom

相关问题