美元对象的复杂性
Dollar Object intricacies
我正在读 Kent Beck 的书"Test Driven Development: By Example."在他的书中,有一个编码示例:
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);
}
根据 Kent 的说法,第二个 Dollar 对象:"product," 是必要的,以保留原始的 "five" dollar 对象;但是,第二个断言 returns 为假,因为 product._amount 等于 30。我一直无法在本文中找到任何勘误表。为了使第二个断言等于 true 或 15 == 15,Kent 上面的代码需要如何更改?这本书的例子有缺陷吗?为什么第二个断言中的 product._amount 不等于 15?
正如评论中所说,这:
public Dollar Times(int multiplier) {
return new Dollar(_amount *= multiplier);
}
应该是:
public Dollar Times(int multiplier) {
return new Dollar(_amount * multiplier);
}
在其原始形式中,*=
运算符修改调用 Times
的 Dollar
class 实例的 _amount
变量。删除 =
会更改操作,以便它仅读取 _amount
变量的值并在计算中使用它。
我正在读 Kent Beck 的书"Test Driven Development: By Example."在他的书中,有一个编码示例:
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);
}
根据 Kent 的说法,第二个 Dollar 对象:"product," 是必要的,以保留原始的 "five" dollar 对象;但是,第二个断言 returns 为假,因为 product._amount 等于 30。我一直无法在本文中找到任何勘误表。为了使第二个断言等于 true 或 15 == 15,Kent 上面的代码需要如何更改?这本书的例子有缺陷吗?为什么第二个断言中的 product._amount 不等于 15?
正如评论中所说,这:
public Dollar Times(int multiplier) {
return new Dollar(_amount *= multiplier);
}
应该是:
public Dollar Times(int multiplier) {
return new Dollar(_amount * multiplier);
}
在其原始形式中,*=
运算符修改调用 Times
的 Dollar
class 实例的 _amount
变量。删除 =
会更改操作,以便它仅读取 _amount
变量的值并在计算中使用它。