在这种情况下编写好的单元测试
本文关键字:单元测试 这种情况下 | 更新日期: 2023-09-27 18:16:25
如果我有如下代码:
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的。净CustomValidatorControl。我没有改变这个实现的余地。
SelectedValue将来自一个列表控件,我想至少测试一个正负条件。
理想情况是:
public void Test_When_SelectedValue_IS_UnSPecified_validate_Returns_False
{
Assert.IsFalse(Validate(UNSPECIFIED_DATATYPE));
}
显然,由于Validate()的方法签名,这是不可能的。
如何编写干净且有意义的单元测试来检查公共Validate方法是否具有不同的模拟选定值?
谢谢
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方法Validate你应该写
public bool Validate(object sender, EventArgs eventArgs)
{
return validator.IsValid();
}
SelectedValue也应该映射到Validator类
- 设置
SelectedValue
为不同的值 呼叫
IsValid