2013-07-23 88 views
4

我使用fluentvalidation如下:集成測試和異常消息

集成測試的
IValidator<Project> _projectValidator; 
_projectValidator.ValidateAndThrow(project); 

部分:

public class ProjectValidator : AbstractValidator<Project> 
{ 
    public ProjectValidator() 
    { 
     RuleFor(project => project.Name).NotEmpty().WithMessage("Project name cannot be empty."); 
    } 
} 
在一些服務

var validationException = Assert.Throws<ValidationException>(() => projectRepository.SaveOrUpdate(project)); 
Assert.That(validationException.Message, Is.EqualTo("Project name cannot be empty.")); 

這顯然不起作用validationException可能包含許多錯誤。即使它只包含一個錯誤字符串看起來是這樣的:

驗證失敗: - 項目名稱不能爲空。

你如何檢查驗證結果/包含指定的驗證消息?:

項目名稱不能爲空。

回答

3

您可以斷言對validationException.Errors集合:

Assert.IsNotNull(validationException.Errors.SingleOrDefault(error => error.ErrorMessage.Equals("Project name cannot be empty."))); 

或者,你可以使用FluentAssertions相同:

validationException.Errors.Should().Contain(error => error.ErrorMessage.Equals("Project name cannot be empty.")); 
+0

謝謝。我一直打算使用fluentassertion - 你的流利的斷言方法工作正常。謝謝。 – cs0815

+0

當然,不客氣。我以爲你可能會喜歡它,並與FluentValidation一起使用它:) –