美元对象错综复杂

时间:2015-05-29 19:24:16

标签: c# tdd assertions

我正在阅读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?

1 个答案:

答案 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变量的值并在计算中使用它。