我有以下代碼:什麼塊沒有在我的測試方法中測試? (VS08測試框架)
private void SetControlNumbers()
{
string controlString = "";
int numberLength = PersonNummer.Length;
switch (numberLength)
{
case (10) :
controlString = PersonNummer.Substring(6, 4);
break;
case (11) :
controlString = PersonNummer.Substring(7, 4);
break;
case (12) :
controlString = PersonNummer.Substring(8, 4);
break;
case (13) :
controlString = PersonNummer.Substring(9, 4);
break;
}
ControlNumbers = Convert.ToInt32(controlString);
}
這是使用下面的測試方法進行測試:
[TestMethod()]
public void SetControlNumbers_Length10()
{
string pNummer = "9999999999";
Personnummer target = new Personnummer(pNummer);
Assert.AreEqual(9999, target.ControlNumbers);
}
[TestMethod()]
public void SetControlNumbers_Length11()
{
string pNummer = "999999-9999";
Personnummer target = new Personnummer(pNummer);
Assert.AreEqual(9999, target.ControlNumbers);
}
[TestMethod()]
public void SetControlNumbers_Length12()
{
string pNummer = "199999999999";
Personnummer target = new Personnummer(pNummer);
Assert.AreEqual(9999, target.ControlNumbers);
}
[TestMethod()]
public void SetControlNumbers_Length13()
{
string pNummer = "1999999-9999";
Personnummer target = new Personnummer(pNummer);
Assert.AreEqual(9999, target.ControlNumbers);
}
出於某種原因,Visual Studio中說,我有1塊,是不是儘管以藍色顯示了測試方法中的所有代碼(即代碼已在我的單元測試中進行了介紹)。這是因爲我沒有在交換機中定義的默認值?當調用SetControlNumbers()方法時,它所操作的字符串已經過驗證和檢查,看它是否符合規範,並且交換機中的各種Substring調用將生成包含4個字符的字符串。我只是好奇它爲什麼說有1個未經測試的區塊。我根本不是單元測試專家,所以我會喜歡這方面的一些反饋。
另外,除了添加try-catch塊並檢查FormatExceptions和OverflowExceptions之外,如何在轉換之後改進轉換以使其更安全?
當號碼爲<10 or > 13時會發生什麼? – sbi 2010-06-01 08:33:24
此代碼不會被調用,因爲在調用SetControlNumbers之前會引發異常。 – Henric 2010-06-01 08:34:49
switch語句中沒有默認值 – 2010-06-01 08:34:56