如何对使用流畅验证创建的 "greater than" 验证进行单元测试?
How can I unit test a "greater than" validation created with fluent validation?
我有一个 属性 如下所示:
RuleFor(c => c.foo).GreaterThan(0);
在fluent validation的文档中,他们指定如果我不能使用"ShouldHaveValidationErrorFor"方法,我可以用"Validate"方法做一些断言,但我不能包头围绕这个
我得到的只是这样的东西:
public void Should_Have_Error_When_Foo_Isnt_Greater_Than_Zero()
{
var bar = new Bar
{
Foo = -1
};
var result = validator.TestValidate(bar);
//Assert.True(bar.Foo > 0, ??)
}
两种方式都可以。
根据提供的信息,假设您的 Bar
class 和 BarValidator
如下所示:
public class Bar
{
public int Foo { get; set; }
}
public class BarValidator : AbstractValidator<Bar>
{
public BarValidator()
{
RuleFor(c => c.Foo).GreaterThan(0);
}
}
...我通常只针对验证器执行此操作,这样更整洁。以下代码测试通过和失败状态。
public class BarValidatorTests
{
[Test]
public void Foo_Zero_HasValidationError()
{
var validator = new BarValidator();
var dto = new Bar { Foo = 0 };
validator.ShouldHaveValidationErrorFor(x => x.Foo, dto);
}
[Test]
public void Foo_One_DoesNotHaveValidationError()
{
var validator = new BarValidator();
var dto = new Bar { Foo = 1 };
validator.ShouldNotHaveValidationErrorFor(x => x.Foo, dto);
}
}
如果你确实想使用 TestValidate
方法,并且在某些情况下你确实想这样做(我在 class 有子对象集合时使用它,我想在特定的子对象上测试验证规则),那么以下在功能上等同于之前的:
public class BarValidatorTestsUsingTestValidate
{
[Test]
public void Foo_Zero_HasValidationError()
{
var validator = new BarValidator();
var dto = new Bar { Foo = 0 };
var validationResults = validator.TestValidate(dto);
validationResults.ShouldHaveValidationErrorFor(x => x.Foo);
}
[Test]
public void Foo_One_DoesNotHaveValidationError()
{
var validator = new BarValidator();
var dto = new Bar { Foo = 1 };
var validationResults = validator.TestValidate(dto);
validationResults.ShouldNotHaveValidationErrorFor(x => x.Foo);
}
}
我有一个 属性 如下所示:
RuleFor(c => c.foo).GreaterThan(0);
在fluent validation的文档中,他们指定如果我不能使用"ShouldHaveValidationErrorFor"方法,我可以用"Validate"方法做一些断言,但我不能包头围绕这个
我得到的只是这样的东西:
public void Should_Have_Error_When_Foo_Isnt_Greater_Than_Zero()
{
var bar = new Bar
{
Foo = -1
};
var result = validator.TestValidate(bar);
//Assert.True(bar.Foo > 0, ??)
}
两种方式都可以。
根据提供的信息,假设您的 Bar
class 和 BarValidator
如下所示:
public class Bar
{
public int Foo { get; set; }
}
public class BarValidator : AbstractValidator<Bar>
{
public BarValidator()
{
RuleFor(c => c.Foo).GreaterThan(0);
}
}
...我通常只针对验证器执行此操作,这样更整洁。以下代码测试通过和失败状态。
public class BarValidatorTests
{
[Test]
public void Foo_Zero_HasValidationError()
{
var validator = new BarValidator();
var dto = new Bar { Foo = 0 };
validator.ShouldHaveValidationErrorFor(x => x.Foo, dto);
}
[Test]
public void Foo_One_DoesNotHaveValidationError()
{
var validator = new BarValidator();
var dto = new Bar { Foo = 1 };
validator.ShouldNotHaveValidationErrorFor(x => x.Foo, dto);
}
}
如果你确实想使用 TestValidate
方法,并且在某些情况下你确实想这样做(我在 class 有子对象集合时使用它,我想在特定的子对象上测试验证规则),那么以下在功能上等同于之前的:
public class BarValidatorTestsUsingTestValidate
{
[Test]
public void Foo_Zero_HasValidationError()
{
var validator = new BarValidator();
var dto = new Bar { Foo = 0 };
var validationResults = validator.TestValidate(dto);
validationResults.ShouldHaveValidationErrorFor(x => x.Foo);
}
[Test]
public void Foo_One_DoesNotHaveValidationError()
{
var validator = new BarValidator();
var dto = new Bar { Foo = 1 };
var validationResults = validator.TestValidate(dto);
validationResults.ShouldNotHaveValidationErrorFor(x => x.Foo);
}
}