gpt4 book ai didi

java - 书上的代码应该有效吗?

转载 作者:行者123 更新时间:2023-12-01 09:31:17 25 4
gpt4 key购买 nike

现在我正在阅读 Kent Beck 的“测试驱动开发”,我对“隐私”章节的理解有问题。我使用 JUnit 4,这是章节中的代码。

我们将测试的类:

public class Dollar {
private int amount;

Dollar(int amount) {
this.amount = amount;
}

public Dollar times(int multiplier) {
return new Dollar(amount * multiplier);
}

public boolean equals(Dollar d) {
return amount == d.amount;
}
}

测试(完全从书中复制):

public void testMultiplication() {
Dollar five= new Dollar(5);
assertEquals(new Dollar(10), five.times(2));
assertEquals(new Dollar(15), five.times(3));
}

阅读一章后我明白这个测试应该有效。但它不能工作,因为 times 方法总是返回新对象,因此 assertEquals 总是会失败。

我的问题是:这个测试应该有效吗?或者它只是作为一个例子来将其翻译成另一种编程语言?

最佳答案

来源:Junit API

assertEquals的源代码说

/**
* Asserts that two objects are equal. If they are not
* an AssertionFailedError is thrown with the given message.
*/
static public void assertEquals(String message, Object expected, Object actual) {
if (expected == null && actual == null) {
return;
}
if (expected != null && expected.equals(actual)) {
return;
}
failNotEquals(message, expected, actual);
}

当您调用assertEquals时,它会调用Dollar类上的.equals

正如 Bohemian 提到的,Object 类的 equals 方法的 @Override -> 提供了根据我们的自定义实现进行检查的能力。

assertEquals(new Dollar(10), five.times(2));

.equals是根据amount来计算的,就解决了目的。

关于java - 书上的代码应该有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39379655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com