我正在使用伟大的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
你是对的,你能不接受我的回答,我会用*真实的*它更新它的原因吗? –