如何测试没有任何实际业务逻辑的类?

时间:2019-05-30 22:07:08

标签: c# unit-testing tdd solid-principles

您如何对该课程进行完全的单元测试?电子邮件验证程序应该调用所有规则的业务逻辑吗?我认为如果测试失败,则意味着发生了故障。我不想开始编写一组测试,这些测试只会告诉我任何更改代码的时间。这似乎是不合理的,因为您进入了这个漏洞,您只是在更改测试以匹配代码。

这是我要全面测试的示例类:

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的字符串,然后验证您是否为假。

我真的不确定那之后该去哪里。我该如何测试此类,并确保如果测试失败,则意味着有问题。

0 个答案:

没有答案