在AutoFixture中基于另一个属性设置一个属性

时间:2017-07-12 15:26:12

标签: c# autofixture

我正在尝试使用AutoFixture创建一个夹具,其中对象的一个​​属性与另一个属性相关,其中一个属性是作为夹具的一部分创建的。

到目前为止我所拥有的是:

fixture = new Fixture().Customize(new MultipleCustomization());
Object object;
double constant;
object = fixture.Build<Object>()
                .With(o => o.PropertyOne, fixture.Create<double>)
                .With(o => o.PropertyTwo, constant * o.PropertyOne)
                .Create());

哪个不起作用,因为&#34;名称&#39; o&#39;在当前的上下文中不存在&#34;,这是有道理的。

有没有办法在夹具的创建过程中做到这一点?

我的情况有点复杂,因为我实际上正在生成一个列表,所以代码看起来像:

fixture = new Fixture().Customize(new MultipleCustomization());
List<Object> objectListFixture;
double constant;
objectListFixture.AddRange(
    fixture.Build<Object>()
           .With(o => o.PropertyOne, fixture.Create<double>)
           .With(o => o.PropertyTwo, constant * o.PropertyOne)
           .CreateMany());

如果可能的话,我真的想避免使用for循环。

1 个答案:

答案 0 :(得分:4)

这样的事情应该这样做,尽管你可能需要先填充o.PropertyOne

var fixture = new Fixture();
var objs = fixture
    .Build<MyObject>()
    .Without(o => o.PropertyOne)
    .Without(o => o.PropertyTwo)
    .Do(o =>
        {
            o.PropertyOne = fixture.Create<double>();
            o.PropertyTwo = o.PropertyOne;
        })
    .CreateMany()
    .ToList();

但是,如果PropertyTwo取决于PropertyOne,那么将该规则作为对象设计的一部分来实现不是更好吗?