public static void ItemTypeTest(DBItemSpecialSettingType settingType, DBItemType type, bool isSetError) { var specialDesc = new DBItemSpecialSettingDesc(); specialDesc.ChangeValueType(settingType, null); var instance = new DBItemSetting { SpecialSettingDesc = specialDesc }; var changedPropertyList = new List <string>(); instance.PropertyChanged += (sender, args) => { changedPropertyList.Add(args.PropertyName); }; var errorOccured = false; try { instance.ItemType = type; } catch (Exception ex) { logger.Exception(ex); errorOccured = true; } // エラーフラグが一致すること Assert.AreEqual(errorOccured, isSetError); errorOccured = false; try { var _ = instance.SpecialSettingDesc; } catch (Exception ex) { logger.Exception(ex); errorOccured = true; } // エラーが発生しないこと Assert.IsFalse(errorOccured); // 意図したとおりプロパティ変更通知が発火していること if (isSetError) { Assert.AreEqual(changedPropertyList.Count, 0); } else { Assert.AreEqual(changedPropertyList.Count, 1); Assert.IsTrue(changedPropertyList[0].Equals(nameof(DBItemSetting.ItemType))); } }
/// <summary> /// DB項目設定セット /// </summary> /// <param name="setting">結果格納インスタンス</param> /// <param name="specialSettingTypes">特殊指定種別リスト</param> /// <param name="itemNames">項目名リスト</param> /// <param name="itemMemos">項目メモリスト</param> /// <param name="descriptionLists">特殊指定選択肢文字列リスト</param> /// <param name="caseNumberLists">特殊指定選択肢数値リスト</param> /// <param name="initValues">初期値リスト</param> /// <exception cref="ArgumentException">ファイルフォーマットが不正の場合</exception> private void SetItemSetting(DBTypeSetting setting, IReadOnlyList <DBItemSpecialSettingType> specialSettingTypes, IReadOnlyList <ItemName> itemNames, IReadOnlyList <ItemMemo> itemMemos, IReadOnlyList <IReadOnlyList <DatabaseValueCaseDescription> > descriptionLists, IReadOnlyList <List <DatabaseValueCaseNumber> > caseNumberLists, IReadOnlyList <DBValueInt> initValues) { // 項目名、項目メモ、文字列パラメータ、数値パラメータ、初期値の長さが一致する必要がある var itemNamesCount = itemNames.Count; var itemMemosCount = itemMemos.Count; var descriptionListsCount = descriptionLists.Count; var caseNumberListsCount = caseNumberLists.Count; var initValuesCount = initValues.Count; if (itemNamesCount != itemMemosCount || itemNamesCount != descriptionListsCount || itemNamesCount != caseNumberListsCount || itemNamesCount != initValuesCount) { throw new ArgumentException( "項目名、項目メモ、文字列パラメータ、数値パラメータ、初期値の要素数が一致しません。(" + $"項目名数:{itemNamesCount}, 項目メモ数:{itemMemosCount}," + $"文字列パラメータ数:{descriptionListsCount}, 数値パラメータ数:{caseNumberListsCount}" + $"初期値数:{initValuesCount})"); } // 特殊指定数が項目数より少ない場合は不正 var specialSettingTypesCount = specialSettingTypes.Count; if (specialSettingTypesCount < itemNamesCount) { throw new ArgumentException( $"特殊指定種別の要素数が不正です。(要素数:{specialSettingTypesCount})"); } var itemSettings = new List <DBItemSetting>(); for (var i = 0; i < itemNamesCount; i++) { var specialSettingDesc = new DBItemSpecialSettingDesc { ItemMemo = itemMemos[i], InitValue = initValues[i] }; var thisDescriptions = descriptionLists[i]; var thisCaseNumbers = caseNumberLists[i]; var thisItemSettingType = specialSettingTypes[i]; try { var caseList = MakeValueCases(thisItemSettingType, thisCaseNumbers, thisDescriptions); specialSettingDesc.ChangeValueType(thisItemSettingType, caseList); if (thisItemSettingType == DBItemSpecialSettingType.ReferDatabase) { specialSettingDesc.DatabaseReferKind = DBReferType.FromCode(thisCaseNumbers[0]); specialSettingDesc.DatabaseDbTypeId = new TypeId(thisCaseNumbers[1]); specialSettingDesc.DatabaseUseAdditionalItemsFlag = thisCaseNumbers[2] == 1; } } catch (Exception ex) { throw new ArgumentException( $"項目{i,2}の特殊指定タイプと特殊指定パラメータが一致しません。" + "詳細はInnerExceptionを確認してください。", ex); } var thisItemName = itemNames[i]; var itemSetting = new DBItemSetting { ItemName = thisItemName, SpecialSettingDesc = specialSettingDesc }; itemSettings.Add(itemSetting); } setting.ItemSettingList.AddRange(itemSettings); }
public static void EqualsTest(string testTypeCode) { var specialDesc = new DBItemSpecialSettingDesc(); specialDesc.ChangeValueType(DBItemSpecialSettingType.Normal, null); var target = new DBItemSetting { ItemName = "ItemName", ItemType = DBItemType.Int, SpecialSettingDesc = specialDesc }; var changedPropertyList = new List <string>(); target.PropertyChanged += (sender, args) => { changedPropertyList.Add(args.PropertyName); }; DBItemSetting another = null; bool result = false; switch (testTypeCode) { case "Same": another = target; result = true; break; case "Null": // another は null で初期化されているため、何もしない break; case "Diff_ItemName": another = new DBItemSetting { ItemName = "ItemName_Diff", ItemType = DBItemType.Int, SpecialSettingDesc = specialDesc }; break; case "Diff_ItemType": another = new DBItemSetting { ItemName = "ItemName", ItemType = DBItemType.String, SpecialSettingDesc = specialDesc, }; break; case "Diff_Desc": var anotherSpecialDesc = new DBItemSpecialSettingDesc(); anotherSpecialDesc.ChangeValueType(DBItemSpecialSettingType.LoadFile, null); another = new DBItemSetting { ItemName = "ItemName", ItemType = DBItemType.Int, SpecialSettingDesc = anotherSpecialDesc }; break; default: Assert.Fail(); break; } // 結果が意図した値と一致すること Assert.AreEqual(target.Equals(another), result); // プロパティ変更通知が発火していないこと Assert.AreEqual(changedPropertyList.Count, 0); }