我试图对一个验证器进行单元测试,当有两个字段匹配时,我会检查这个验证器 - 但我完全不知道如何完成它。
我已经尝试了
var validator = new CreateUserValidator();
validator.ShouldHaveValidationErrorFor(user => user.Password.Equals(user.PasswordConfirmation));
但是没有重载的ShouldHaveValidationErrorFor需要1个参数。如果没有声明局部变量并将值设置为PasswordConfirmation的值,我将不知道如何有效地测试它。
有没有人有任何想法?
答案 0 :(得分:2)
老实说,我发现扩展程序有点令人困惑,与Fluent Validator本身一样(这只是我的看法)但是一旦你习惯了它,扩展和产品就很有用。
对于你的问题, 你需要
一个。第一个参数说明为
设置验证器的字段/属性湾具有违反/继承规则验证的对象。
请参阅下面的代码。
[TestFixture]
public class Tests
{
[Test]
public void NameEqualTest()
{
var v = new PersonValidator();
var p = new Person() {Name1 = "Name2", Name2 = "Name2"};
//I prefer this..
//ValidationResult validationResult = v.Validate(p);
//Assert.True(validationResult.IsValid);
v.ShouldNotHaveValidationErrorFor(person => p.Name1, p);
}
}
使用ShouldNotHaveValidationErrorFor,因为它不那么混乱.. 当2个属性相等时,测试通过。即没有验证错误。
如果2个属性不相等,则会出错。
public class Person
{
public string Name1 { get; set; }
public string Name2 { get; set; }
}
public class PersonValidator : AbstractValidator<Person>
{
public PersonValidator()
{
RuleFor(x => x.Name1).Equal(x => x.Name2)
.WithMessage("names are not equal");
}
}