WPF项目中的单元测试。我正在开始单元测试,并且不确定为什么两个测试中的第二个失败了。
如果我尝试使用较小的数字,根据第一次测试,它可以工作,是否有我可能需要知道的数字限制,或者它可能是与其他内容相关的错误? AddMoreDifficult 传递, AddEvenMoreDifficult 失败,并提供 988302965
的结果通过的测试
public void AddMoreDifficult()
{
calculator.KeyCommand.Execute("10000");
calculator.AddCommand.Execute(null);
calculator.KeyCommand.Execute("24756");
calculator.EquateCommand.Execute(null);
Assert.AreEqual(34756, calculator.CurrentValue);
}
测试失败
[TestMethod]
public void AddEvenMoreDifficult()
{
calculator.KeyCommand.Execute("9578237555");
calculator.AddCommand.Execute(null);
calculator.KeyCommand.Execute("2");
calculator.EquateCommand.Execute(null);
Assert.AreEqual(9578237557, calculator.CurrentValue);
}
注意:
这会在Unit Testing Part 2 14分钟内完成,但会被跳过。
答案 0 :(得分:2)
这是因为整数溢出。计算器将currentValue
存储为整数,当调用KeyCommand.Execute("9578237555")
时,它会执行以下操作:
int currentValue = 0; // this is previously set
string keyString = "9578237555";
foreach (char key in keyString.ToString())
{
if (!char.IsDigit(key))
{
throw new ArgumentException("Invalid key", "key");
}
currentValue = (currentValue * 10) + (int)char.GetNumericValue(key);
}
因此它会将currentValue
增加10倍,直到达到最大值。如果您在分配后打印出currentValue
,则可以看到此内容:
9
95
957
9578
95782
957823
9578237
95782375
957823755
988302963
不幸的是,这种类型的溢出不会产生异常。如果将类型更改为long,则测试将正常工作。