我创建了一个自定义验证器,它测试一个值是否在枚举的有效值范围内:
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>();
我的问题:
这不能按预期工作,因为我需要指定
....IsInEnum<T, DayOfWeek>()
而不是期望的....IsInEnum<DayOfWeek>();
. 我如何实现这一目标?我想测试这个自定义验证器——不是用这个验证器测试我的数据,而是测试验证器本身。该库的文档解释了如何测试您的数据,而不是如何测试自定义验证器。库中似乎有很多测试代码,有什么我可以重用的吗?我使用 NUnit。