我正在使用偉大的FluentValidation庫,並在單元測試驗證程序中遇到問題。我有以下的例子此Wiki網頁上儘可能接近(但我使用的xUnit)https://github.com/JeremySkinner/FluentValidation/wiki/g.-TestingFluent驗證測試未處理預期空值
它使用ShouldHaveValidationErrorFor擴展方法測試。
我得到一個NullReferenceException與測試失敗。但那正是我所測試的 - 一個必填字段的空引用。
這裏是我的代碼:
驗證:
public class ChangeEmailRequestInputModelValidator : AbstractValidator<ChangeEmailRequestInputModel>
{
public ChangeEmailRequestInputModelValidator()
{
RuleFor(x => x.NewEmail)
.NotEmpty();
RuleFor(m => m.NewEmail.Trim())
.EmailAddress()
.When(m => m.NewEmail != null)
.WithMessage(ValidationConstants.SymbolIsNotAValidEmailAddress, x => x.NewEmail)
.WithName("NewEmail");
RuleFor(m => m.NewEmailConfirm.Trim())
.Cascade(CascadeMode.Continue)
.NotEmpty().WithMessage("Confirm New Email field cannot be empty.")
.Equal(m => m.NewEmail.Trim()).WithMessage("Confirm New Email field must be equal to the New Email.");
}
}
測試:
public class ChangeEmailRequestInputModelValidatorTests
{
[Fact]
public void Errors_Where_NewEmail_Is_Null()
{
var val = new ChangeEmailRequestInputModelValidator();
val.ShouldHaveValidationErrorFor(v => v.NewEmail, null as string);
}
}
任何想法,爲什麼發生這種情況?我一定有什麼不對,但看起來和我很模糊的例子很相似。
謝謝。這是完全合理的。我知道問題出在我的代碼上。只是看不到它。 – onefootswill
對不起,重新審視這一點,但不應該當條件保護代碼當值爲null時炸掉。我預計Trim將不會被稱爲「何時」會阻止代碼的執行。 – onefootswill
你是對的,你能不接受我的回答,我會用*真實的*它更新它的原因嗎? –