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);
}
댓글 없음:
댓글 쓰기