您如何对该课程进行完全的单元测试?电子邮件验证程序应该调用所有规则的业务逻辑吗?我认为如果测试失败,则意味着发生了故障。我不想开始编写一组测试,这些测试只会告诉我任何更改代码的时间。这似乎是不合理的,因为您进入了这个漏洞,您只是在更改测试以匹配代码。
这是我要全面测试的示例类:
public class EmailValidator
{
string _email;
bool _valid;
private List<IEmailRule> _emailValidationRules = new List<IEmailRule>()
{
new AtSignRule(),
new Last4OfEmailRule(),
new LengthRule()
};
public List<String> invalidReasons = new List<string>();
public EmailValidator(string email, List<IEmailRule> emailRules = null)
{
_email = email;
_valid = false;
if (emailRules != null)
_emailValidationRules = emailRules;
}
public void Validate()
{
_valid = true;
foreach(var rule in _emailValidationRules)
{
if (!rule.Validate(_email))
{
invalidReasons.Add(rule.InvalidReason);
_valid = false;
}
}
}
public List<string> GetInvalidReasons()
{
return invalidReasons;
}
public bool IsValid()
{
return _valid;
}
}
IEmailRule接口:
public interface IEmailRule
{
bool Validate(string email);
string InvalidReason { get; }
}
AtSignRule:
public class AtSignRule : IEmailRule
{
public string InvalidReason { get { return "Email does not contain @"; } }
public bool Validate(string email)
{
if (!email.Contains("@"))
{
return false;
}
return true;
}
}
At符号规则很容易编写一些测试(可能是因为它很小)。只需传递一个带有@的字符串,然后验证结果是否正确,然后再测试一个不带A的字符串,然后验证您是否为假。
我真的不确定那之后该去哪里。我该如何测试此类,并确保如果测试失败,则意味着有问题。