我正在阅读Kent Beck的书“测试驱动开发:通过示例”。在他的书中,有一个编码示例:
public class Dollar
{
public int _amount;
public Dollar(int amount)
{
_amount = amount;
}
public Dollar Times(int multiplier)
{
return new Dollar(_amount *= multiplier);
}
}
[TestMethod]
public void TestMethod2()
{
Dollar five = new Dollar(5);
Dollar product = five.Times(2);
Assert.AreEqual(10, product._amount);
product = five.Times(3);
Assert.AreEqual(15, product._amount);
}
根据肯特的说法,第二个美元对象:“产品”,是为了保留原来的“五美元”物品所必需的;但是,第二个断言返回false,因为product._amount等于30.我一直无法在此文本中找到任何勘误。为了使第二个断言等于真或15 == 15,Kent的代码如何才能改变?这本书的例子有缺陷吗?为什么第二个断言中的product._amount不等于15?
答案 0 :(得分:0)
正如评论中所说,这:
public Dollar Times(int multiplier) {
return new Dollar(_amount *= multiplier);
}
应该是:
public Dollar Times(int multiplier) {
return new Dollar(_amount * multiplier);
}
*=
运算符在其原始格式中修改了_amount
类的实例的Dollar
变量,该Times
类被调用=
。删除_amount
会更改操作,以便它只读取&rest
变量的值并在计算中使用它。