在 AutoFixture 中根据另一个属性设置一个属性

yin*_*ers 3 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());
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为“当前上下文中不存在名称 '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());
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ann 6

应该这样做,尽管您可能需要先填充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();
Run Code Online (Sandbox Code Playgroud)

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