최근 데코레이터 패턴을 사용하여 제 문제 중 하나를 해결했습니다. 모든 것이 잘 작동하고 모든 것이 분리되어 있으므로 (또는 내가 생각하기에) 각 유효 필드를 개별적으로 단위 테스트 할 수 있습니다.유닛 데코레이터 패턴 테스트하기
MyValidator와 AgeValidator가 모두 Validate() 및 IsValid() (추상) 함수에 대한 테스트를 통과하면 내 질문에 대한 답입니다. 아직 ValidationDecorator 클래스를 단위 테스트해야합니까 (아직 생성되지 않았습니까)? ValidationDecorator는 각 유효성 검사 클래스에 내 유효성 검사기를 꾸미는 것에 대한 책임이 있습니다.
public abstract class FieldValidator
{
protected IMessage validateReturnType;
public FieldValidator() { }
public bool IsValid()
{
return (validateReturnType.GetType() == typeof(Success));
}
}
public class NameValidator : FieldValidator, IValidator
{
private string name;
public NameValidator(string _name) {
name = _name;
}
public IMessage Validate()
{
if (name.Length < 5)
{
validateReturnType = new Error("Name error.");
}
else
{
validateReturnType = new Success("Name no errror.");
}
return validateReturnType;
}
}
public class AgeValidator : FieldValidator, IValidator
{
private int age;
public AgeValidator(int _age)
{
age = _age;
}
public IMessage Validate()
{
if (age <= 18)
{
validateReturnType = new Error("Age error.");
}
else
{
validateReturnType = new Success("Age no errror.");
}
return validateReturnType;
}
}
public interface IValidator
{
IMessage Validate();
bool IsValid();
}
이것은 나의 단위 테스트입니다.
[TestFixture]
public class ValidatorTest
{
Type successType;
Type errorType;
Model m;
[SetUp]
public void SetUp()
{
successType = typeof(Success);
errorType = typeof(Error);
m = new Model();
m.Name = "Mike Cameron";
m.Age = 19;
m.Height = 325;
Validator v = new Validator();
v.Validate(m);
}
[Test]
public void ValidateNameTest()
{
IValidator im = new NameValidator(m.Name);
IMessage returnObj = im.Validate();
Assert.AreEqual(successType, returnObj.GetType());
}
[Test]
public void IsValidNameTest()
{
IValidator im = new NameValidator(m.Name);
IMessage returnObj = im.Validate();
Assert.IsTrue(im.IsValid());
}
[Test]
public void ValidateAgeTest()
{
IValidator im = new AgeValidator(m.Age);
IMessage returnObj = im.Validate();
Assert.AreEqual(successType, returnObj.GetType(), "Must be over 18");
}
[Test]
public void IsValidAgeTest()
{
IValidator im = new AgeValidator(m.Age);
IMessage returnObj = im.Validate();
Assert.IsTrue(im.IsValid());
}
감사합니다.