LoginSignup
blue32a
@blue32a (blue32a)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

[Java] assertEqualsでのクラスオブジェクト比較

解決したいこと

JavaのassertEqualsでクラスを比較する場合、異なるクラスでもテストは通るのでしょうか?

『テスト駆動開発』(オーム社)
第1部 多国籍通貨
第10章 テストに聞いてみる

この章の最終的なコードで、異なるクラス(FrancMoney)を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

No Answers yet.

Your answer might help someone💌