gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:14:56 24 4
gpt4 key购买 nike

如果我有如下代码:

    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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com