我不確定這是否可能,但我認為值得一問。我們有許多對象,這些對象具有其他子對象的層次結構。我們不使用一系列 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 關注
- 134 瀏覽
添加回答
舉報
0/150
提交
取消