我有以下代码:
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说我有一个块没有被测试,尽管它用蓝色显示了被测试方法中的所有代码(即,代码在我的单元测试中被覆盖)。这是因为我没有在开关中定义默认值吗?当调用setControlNumbers()方法时,它所操作的字符串已经过验证和检查,以确保它符合规范,并且开关中的各种子字符串调用将生成一个包含4个字符的字符串。我只是好奇为什么它说有1个未测试的块。我根本不是单元测试专家,所以我希望得到一些反馈。
另外,除了添加一个try-catch块并检查formatExceptions和overflowExceptions之外,如何改进开关后的转换以使其更安全?