我正在尝试使用 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());
这不起作用,因为“当前上下文中不存在名称 'o'”,这是有道理的。
作为夹具创建的一部分,有没有办法做到这一点?
我的情况有点复杂,因为我实际上是在生成一个列表,所以代码看起来像:
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 循环。
应该这样做,尽管您可能需要先填充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
,那么将该规则作为对象设计的一部分来实现不是更好吗?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句