【发布时间】:2012-10-30 22:59:38
【问题描述】:
我创建了一个自定义验证器,它测试一个值是否在枚举的有效值范围内:
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。
【问题讨论】:
标签: c# unit-testing testing lambda fluentvalidation