7

値が列挙型の有効な値の範囲内にあることをテストするカスタム バリデータを作成しました。

public class IsInEnumValidator<T> : PropertyValidator {
  public IsInEnumValidator() : base("Property {PropertyName} it not a valid enum value.") { }
  protected override bool IsValid(PropertyValidatorContext context) {
    if (!typeof(T).IsEnum) return false;
    return Enum.IsDefined(typeof(T), context.PropertyValue);
  }
}

そして、バリデーターをチェーンするための拡張メソッド:

public static IRuleBuilderOptions<T, TProperty> IsInEnum<T, TProperty>(this IRuleBuilder<T, TProperty> ruleBuilder) {
  return ruleBuilder.SetValidator(new IsInEnumValidator<TProperty>());
}

私はこのように使用したい:

RuleFor(x => x.Day).IsInEnum<DayOfWeek>();

私の質問:

  1. ....IsInEnum<T, DayOfWeek>()目的の代わりに特定する必要があるため、これは期待どおりに機能しません....IsInEnum<DayOfWeek>();。どうすればこれを達成できますか?

  2. このカスタムバリデーターをテストしたい - このバリデーターでデータをテストするのではなく、バリデーター自体をテストしたい。ライブラリのドキュメントでは、カスタム バリデータをテストする方法ではなく、データをテストする方法について説明しています。ライブラリには多くのテスト コードがあるようですが、再利用できるものはありますか? NUnitを使用しています。

4

2 に答える 2

11

IsInEnum()1: 型推論のため、実際には呼び出しで何も指定する必要はありません。

2: テストの場合、プロジェクトには、このシナリオに適合するように調整できる多くのテストがあります。

于 2012-10-31T11:33:24.310 に答える
4

バージョン 6.2 から IsInEnum が組み込まれています。6.2.1 から Nullable Enum がサポートされます。

乾杯。

于 2016-02-26T16:10:20.753 に答える