gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:30:17 25 4
gpt4 key购买 nike

我正在尝试使用 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,那么作为对象设计的一部分来实现该规则不是更好吗?

关于c# - 在 AutoFixture 中根据另一个属性设置一个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45061883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com