Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用自定义FluentValidator验证程序验证枚举_C#_Unit Testing_Testing_Lambda_Fluentvalidation - Fatal编程技术网

C# 使用自定义FluentValidator验证程序验证枚举

C# 使用自定义FluentValidator验证程序验证枚举,c#,unit-testing,testing,lambda,fluentvalidation,C#,Unit Testing,Testing,Lambda,Fluentvalidation,我创建了一个自定义验证器,用于测试值是否在枚举的有效值范围内: public class IsInEnumValidator<T> : PropertyValidator { public IsInEnumValidator() : base("Property {PropertyName} it not a valid enum value.") { } protected override bool IsValid(PropertyValidatorContext con

我创建了一个自定义验证器,用于测试值是否在枚举的有效值范围内:

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);
  }
}
公共类IsInEnumValidator:PropertyValidator{
public IsInEnumValidator():base(“属性{PropertyName}它不是有效的枚举值。”){
受保护的覆盖布尔值有效(PropertyValidatorContext上下文){
如果(!typeof(T).IsEnum)返回false;
返回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>());
}
公共静态IRuleBuilder选项IsInEnum(此IRuleBuilder规则生成器){
返回ruleBuilder.SetValidator(新的IsInEnumValidator());
}
我想这样使用它:

RuleFor(x => x.Day).IsInEnum<DayOfWeek>();
RuleFor(x=>x.Day).IsInEnum();
我的问题:

  • 这没有按预期工作,因为我需要指定
    …IsInEnum()
    而不是所需的
    …IsInEnum()。我如何做到这一点

  • 我想测试这个自定义验证器-不是用这个验证器测试我的数据,而是测试验证器本身。库的文档解释了如何测试数据,而不是如何测试自定义验证器。库中似乎有很多测试代码,有什么我可以重用的吗?我用NUnit


  • 1:由于类型推断,实际上不需要在
    IsInEnum()调用中指定任何内容


    2:对于测试,该项目有很多测试,可以进行调整以适应此scneario。

    ,因为6.2版IsInEnum是内置的。 从6.2.1开始,支持可为空的枚举

    干杯