[英]Fluent Validation - How to ensure that a collection Count greater than zero when not null, but can be null
[英]How can I unit test a "greater than" validation created with fluent validation?
我有一個如下所示的屬性:
RuleFor(c => c.foo).GreaterThan(0);
在 fluent 驗證的文檔中,他們指定如果我不能使用“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
類和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
方法,並且在某些情況下您確實想這樣做(當我的類具有子對象集合時使用它,並且我想測試特定子對象上的驗證規則),那么接下來在功能上等同於之前的:
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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.