public class Todo : IValidatableObject { //[Required] //[StringLength(25)] public string Title { get; set; } public IEnumerable<ValidationResult> Validate( ValidationContext validationContext) { if (string.IsNullOrEmpty(Title)) yield return new ValidationResult( "제목이 입력되지 않았습니다.", new[] { "Title" }); if (Title != null && Title.Length > 25) yield return new ValidationResult( "제목이 25자를 초과할 수 없습니다.", new[] { "Title" }); } }
제목 길이에 따른 각 개체들의 유효성 검사는 다음과 같이 테스트 한다.
[TestFixture] public class TodoTest { [Test] public void Title_Length_Should_Be_To_Maximum_Of_25_Characters() { // Arrange Todo longTodo = new Todo { Title = "123456789ABCDEF123456789ABCDEF" }; Todo twentyFiveCharacterTodo = new Todo { Title = "123456789ABCDEF1234567" }; Todo shortTodo = new Todo { Title = "123456789" }; // Assert Assert.IsFalse(IsValid(longTodo)); Assert.IsTrue(IsValid(twentyFiveCharacterTodo)); Assert.IsTrue(IsValid(shortTodo)); } private bool IsValid(IValidatableObject toValidate) { return Validator.TryValidateObject( toValidate, new ValidationContext(toValidate, null, null), null, true); } }
에러 메시지를 확인하고 싶다면 ValidationResult 리스트를 사용하면 된다.
[Test] public void Title_Length_Should_Be_To_Maximum_Of_25_Characters() { // Arrange Todo longTodo = new Todo { Title = "123456789ABCDEF123456789ABCDEF" }; var result = new List<ValidationResult>(); Validator.TryValidateObject( longTodo, new ValidationContext(longTodo, null, null), result, true); // Assert Assert.AreEqual(1, result.Count); Assert.AreEqual("제목은 25자를 초과할 수 없습니다.", result[0].ErrorMessage); }
댓글 없음:
댓글 쓰기