单位测试在计算器示例中使用更长的数字失败

时间:2015-10-23 11:09:07

标签: c# wpf unit-testing

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分钟内完成,但会被跳过。

1 个答案:

答案 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,则测试将正常工作。