想象一下這個簡單的場景:我有一個叫MyModel
類:我應該如何在C#中測試多個必填字段?
public class MyModel
{
public string Prop01 { get; set; }
public string Prop02 { get; set; }
public string Prop03 { get; set; }
public bool IsValid()
{
if (String.IsNullOrEmpty(Prop01) || String.IsNullOrEmpty(Prop02) || String.IsNullOrEmpty(Prop03))
return false;
return true;
}
}
如,你可以看到,如果有的話就MyModel
屬性爲空或爲空,IsValid()
方法將返回false
,換句話說,所有的字段都是「必需的」。
我寫了一些單元測試測試IsValid()
方法:
[TestMethod]
public void MyModel_Invalid_When_Prop01_Is_Null()
{
var myModel = new MyModel();
Assert.AreEqual(myModel.IsValid(), false);
}
[TestMethod]
public void MyModel_Invalid_When_Prop02_Is_Null()
{
var myModel = new MyModel();
Assert.AreEqual(myModel.IsValid(), false);
}
[TestMethod]
public void MyModel_Invalid_When_Prop03_Is_Null()
{
var myModel = new MyModel();
Assert.AreEqual(myModel.IsValid(), false);
}
當然,所有的這些測試會過去,但我不與非常高興。讓我們想象一下,我是看到了MyModel_Invalid_When_Prop01_Is_Null
測試(由另一個開發商writen)的開發人員。我期望僅僅通過將值分配給的myModel
的Prop01
,試驗應啓動失敗。但是,當然,這不會發生的,所以我改變了測試,如下所示:
[TestMethod]
public void MyModel_Invalid_When_Prop01_Is_Null()
{
var myModel = new MyModel();
myModel.Prop02 = "Some value";
myModel.Prop03 = "Some value";
Assert.AreEqual(myModel.IsValid(), false);
}
[TestMethod]
public void MyModel_Invalid_When_Prop02_Is_Null()
{
var myModel = new MyModel();
myModel.Prop01 = "Some value";
myModel.Prop03 = "Some value";
Assert.AreEqual(myModel.IsValid(), false);
}
[TestMethod]
public void MyModel_Invalid_When_Prop03_Is_Null()
{
var myModel = new MyModel();
myModel.Prop01 = "Some value";
myModel.Prop02 = "Some value";
Assert.AreEqual(myModel.IsValid(), false);
}
現在測試真的測試,每個屬性都被填充了,但如果我添加Prop04
到MyModel
,這也是必填字段,我需要再次更改所有單元測試,所以我不認爲這是個好主意。
所以我的問題是:我該如何單元測試多個必需的屬性,我確信測試是通過還是失敗,因爲我正在測試的特定屬性?或者,也許,我應該測試這些場景嗎?
非常好!感謝你的回答! –
很高興幫助! *如果它對你有幫助,請注意/接受答案 – Kenneth