2010-06-01 97 views
1

我有以下代碼:什麼塊沒有在我的測試方法中測試? (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之外,如何在轉換之後改進轉換以使其更安全?

+1

當號碼爲<10 or > 13時會發生什麼? – sbi 2010-06-01 08:33:24

+0

此代碼不會被調用,因爲在調用SetControlNumbers之前會引發異常。 – Henric 2010-06-01 08:34:49

+2

switch語句中沒有默認值 – 2010-06-01 08:34:56

回答

3

您需要在switch語句中添加一個默認部分來捕獲未明確定義的情況。

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; 
     default: 
      //decide what to do here, 
      //could do this or something more appropriate for your situation 
      throw new NotSupportedException("An invalid PersonNummer.Length value was encountered.") 
    } 

    ControlNumbers = Convert.ToInt32(controlString); 
} 
+0

正確!看到我對Ardman和sbi的評論。多謝你們! – Henric 2010-06-01 08:38:42