2010-06-01 95 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