我不确定这是否可能,但我认为值得一问。我们有许多对象,这些对象具有其他子对象的层次结构。我们不使用一系列 IEnumerable 集合,而是使用字典,这样当在 MongoDb 中查询数据时,可以轻松/快速地遍历层次结构。例如:在主模型中,我们有类似的内容:public Dictionary<string, TopLevelGroup> TopGroups { get; set; }然后在 TopLevelGroup 中我们有类似的内容:public Dictionary<string, SecondLevelGroup> SecondLevelGroups { get; set; }键必须是一个字符串,以便它可以作为 ReferencedDictionary 存储在 Mongo 中(我认为这是正确的),并且可以通过执行以下操作来访问数据:TopLevelGroup[keyA].SecondLevelGroup[keyB].Property所有键都是对象的 id 属性(它们也有一个通用的 IDocument 接口,它要求所有文档都有一个 Id ...当然)。所以我想要在 AutoFixture 中做的是让所有自动生成的字典都使用对象的 Id 作为键(而不是随机生成的字符串)。我怀疑这有点疯狂并且不受支持,但我想问一下以防万一,因为我目前不太了解 AutoFixture。
1 回答
慕森王
TA贡献1777条经验 获得超3个赞
不,这一点也不疯狂,而且是受支持的。
这种情况正是定制方法的用处。
使用该方法,您可以自定义对象的创建方式。
你也许可以这样做:
fixture.Customize<TopLevelGroup>( c => c.With( propertyPicker: x => x.SecondLevelGroups, valueFactory: (IEnumerable<SecondLevelGroup> input) => input.ToDictionary(y => y.Id))); fixture.Customize<MainModel>( c => c.With( propertyPicker: x => x.TopGroups, valueFactory: (IEnumerable<TopLevelGroup> input) => input.ToDictionary(y => y.Id)));
该With
方法用于指定属性的值。第一个参数是 propertypicker,例如x => x.SecondLevelGroups
第二个参数是一个值或一个 valuefactory。valuefactory 可以接受一个输入,自动固定装置将填充该输入。例如,IEnumerable<SecondLevelGroup>
我们可以将其转换为具有我们想要的键的字典。
- 1 回答
- 0 关注
- 89 浏览
添加回答
举报
0/150
提交
取消