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

时间:2011-11-30 10:45:27

标签: 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()的方法签名,这是不可能的。

如何编写干净且有意义的单元测试来检查具有不同模拟选定值的公共Validate方法?

由于

2 个答案:

答案 0 :(得分:2)

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

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方法验证你应该写

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

SelectedValue也可以映射到Validator类

答案 1 :(得分:0)

  1. SelectedValue设置为不同的值
  2. 致电IsValid
  3. 您可能需要使用一些反思......