[Java] assertEqualsでのクラスオブジェクト比較
解決したいこと
JavaのassertEquals
でクラスを比較する場合、異なるクラスでもテストは通るのでしょうか?
『テスト駆動開発』(オーム社)
第1部 多国籍通貨
第10章 テストに聞いてみる
この章の最終的なコードで、異なるクラス(Franc
とMoney
)をassertEquals
比較しているテストがあります。testFrancMultiplication
PHPでこの書籍に沿って試しているのですが、PHPではこの部分でクラスが一致せずにエラーになります。
もちろん言語の違いはあると思うのですが、Javaではこのテストが通るのでしょうか?
該当するソースコード
一部省略しています。(特にDollar
クラスとそれに関する部分など)
MoneyTest.java
package money;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class MoneyTest {
// ...
@Test
public void testFrancMultiplication() {
Money five = Money.franc(5);
assertEquals(Money.franc(10), five.times(2)); // FrancとMoneyの比較
assertEquals(Money.franc(10), five.times(2)); // FrancとMoneyの比較
}
// ...
@Test
public void testDifferentClassEquality() {
assertTrue(new Money(10, "CHF").equals(new Franc(10, "CHF")));
}
}
Franc.java
package money;
class Franc extends Money {
Franc(int amount, String currency) {
super(amount, currency);
}
}
Money.java
package money;
class Money {
protected int amount;
protected String currency;
Money(int amount, String currency) {
this.amount = amount;
this.currency = currency;
}
Money times(int multiplier) {
return Money(amount * multiplier, currency);
}
// ...
public boolean equals(Object object) {
Money money = (Money) object;
return amount == money.amount
&& currency().equals(money.currency());
}
// ...
static Money franc(int amount) {
return new Franc(amount, "CHF");
}
}
自分で試したこと
ドキュメントを確認しましたが、疑問の答えには行き着きませんでした。
もしかするとassertEquals
ではMoney.equals
で比較しているのでは?
0 likes