별도로 검증을 테스트 할 수 있습니다. 유효성 검사 응용 프로그램 블록에는 서비스 코드를 직접 실행할 때 유효성 검사를 호출 할 수는 없지만 사용자가 알고있는 코드를 테스트하는 두 가지 방법이 있습니다.
- ValidatorFactory를 사용하여 입력 유형에 대한 유효성 검사기를 만들고 유효성 검사 결과에 예상되는 오류가 포함되어 있다고 가정하십시오.
- Validator를 직접 인스턴스화하고 다양한 입력으로 테스트합니다.
실제로 두 기술의 조합을 사용합니다. 복잡한 입력 유형에 대한 유효성 검증 오류를 테스트하는 방법 1을 사용합니다. 예를 들면 다음과 같습니다.
[DataContract]
public class Product
{
[DataMember, NotNullValidator]
public string Name { get; set; }
[DataMember, RangeValidator(0.0, RangeBoundaryType.Exclusive,
double.MaxValue, RangeBoundaryType.Ignore,
ErrorMessage = "The value cannot be less than 0.")]
public double Price { get; set; }
}
[TestMethod]
public void InvalidProduct_ReturnsValidationErrors()
{
Product request = new Product()
{
Price = -10.0
};
var validatorFactory = EnterpriseLibraryContainer.Current
.GetInstance<ValidatorFactory>();
var validator = validatorFactory.CreateValidator<Product>();
var results = validator.Validate(request);
Assert.IsTrue(results.Any(vr => vr.Key == "Name"
&& vr.Message == "The value cannot be null."));
Assert.IsTrue(results.Any(vr => vr.Key == "Price"
&& vr.Message == "The value cannot be less than 0."));
}
방법 2의 경우 필자가 만든 유효성 검사기에 대한 사용 사례 시나리오를 다루는 테스트가 있습니다. 또 다른 예를 들어 :
[TestMethod]
public void XmlStringValidator_ReturnsErrors_OnInvalidInput()
{
var validator = new XmlStringValidator();
var results = validator.Validate("Your input goes here");
Assert.IsTrue(results.Any(vr => vr.Key == "[KeyNameInValidator]" &&
vr.Message == "[Expected error message based on input]"));
}
방법이 당신이 당신의 XmlStringValidator을 위해 원하는대로 많은 테스트 시나리오를 만들 수 있습니다.
이 방법에 대한 자세한 내용은이 문서에서 확인할 수 있습니다. Chapter 6 - Banishing Validation Complication