c# - 在这种情况下编写好的单元测试

标签 c# asp.net unit-testing tdd

如果我有如下代码:

    public const string UNSPECIFIED_DATATYPE = "11";         
    private string SelectedValue = "11";

    public bool Validate(object sender, EventArgs eventArgs)
    {
        return IsValid();
    }

    private bool IsValid()
    {            
        return (SelectedValue != UNSPECIFIED_DATATYPE);
    }

方法签名实际上是针对 ASP.Net CustomValidatorControl 的。我无权更改此实现。

SelectedValue 将来自列表控件,我想至少测试一个正负条件。

理想情况下,像这样:

    public void Test_When_SelectedValue_IS_UnSPecified_validate_Returns_False
    {            
        Assert.IsFalse(Validate(UNSPECIFIED_DATATYPE));
    }

显然,由于 Validate() 的方法签名,这是不可能的。

我如何编写清晰且有意义的单元测试来检查具有不同模拟选定值的公共(public) Validate 方法?

谢谢

最佳答案

IsValid 这个方法是私有(private)的,不太好测试 您可以在单独的类中提取验证逻辑,然后将 CustomValidatorControl 验证逻辑委托(delegate)给此类。这有助于您测试此类中的所有逻辑 看下面的例子

public class SelectedValueValidator
{
    public const string UNSPECIFIED_DATATYPE = "11";


    private string selectedValue = "11";

    public string SelectedValue
    {
        get { return selectedValue; }
        set { selectedValue = value; }
    }

    public bool IsValid()
    {
        return (SelectedValue != UNSPECIFIED_DATATYPE);
    }

}

还有这个类的测试

    [Test]
    public void IsValid_SelectedValueDifferent_ReturnTrue()
    {
        //Arrange
        var validator = new SelectedValueValidator { SelectedValue = "123" };
        //Act
        bool result = validator.IsValid();
        //Assert
        Assert.That(result, Is.True);
    }

    [Test]
    public void IsValid_SelectedValueIsTheSame_ReturnFalse()
    {
        //Arrange
        var validator = new SelectedValueValidator ();
        //Act
        bool result = validator.IsValid();
        //Assert
        Assert.That(result, Is.False);
    }

还有你应该写的 in 方法 Validate

        public bool Validate(object sender, EventArgs eventArgs)
    {
        return validator.IsValid();
    }

SelectedValue 也可以映射到 Validator 类

关于c# - 在这种情况下编写好的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8324651/

相关文章:

c# - 这是在 C# 中创建线程安全类的好设计吗?

c# - ASP.NET Core 2.1 如何确定没有 Authorize 属性的声明?

unit-testing - 为单元测试公开 M 文件子函数的最简单方法是什么?

c# - 如何处理 system.net.mail.smtpfailedrecipientsexception 失败的收件人

python - 当深度嵌套多个依赖项时如何模拟 Python 类

unit-testing - 如何使用命名组件对这个 IoC 注册进行单元测试? (Autofac)

c# - DataGrid 的意外行为

c# - 如何将 HTTP 响应转发给客户端

c# - 如何在 C# 中读取 PowerPoint 幻灯片中的复杂方程式

c# - 为什么我的字符串值在插入 SQL 数据库时会累积空格?