Index: [Article Count Order] [Thread]

Date:  Mon, 2 Oct 2000 10:15:16 +0900
From:  "Masaru Ishii" <mishii@....jp>
Subject:  [XP-jp:00998] Re: テストのためだけのメソッド
To:  extremeprogramming-jp@....jp (extremeprogramming-jp ML)
Message-Id:  <NEBBLCBLMJKDLAMIAMIGKEAPCLAA.mishii@....jp>
In-Reply-To:  <B5FC215F.3C08%khosokawa@....com>
Posted:  Mon, 2 Oct 2000 10:14:58 +0900
X-Mail-Count: 00998

石井です.

> > デバッグのためだけにtoStringをオーバーライドする,ということは
> >よくやって ますが,皆さんは,こういうもひっかかるんでしょうか?
>
> toString() は、デバッグの時、有効だと思いますが、テストの時は、
> どの様に使うのでしょうか?

JUnit の assertEquals を拡張するには,テスト対象クラスの
equals メソッド と toString メソッドをオーバーライドするのが一番
簡単です.
そうすれば,自分のクラスに合った assertEquals になります.
例えば・・

public class Pair
{
    public Object first, second;
    public Pair(Object first, Object second)
    {
        this.first = first;
        this.second = second;
    }
    public boolean equals(Object obj)
    {
        if (this == obj)
            return true;
        if (!(obj instanceof Pair))
            return false;
        Pair target = (Pair)obj;
        return
            ObjectHelper.equalsSafely(first, target.first) &&
            ObjectHelper.equalsSafely(second, target.second);
       //ObjectHelper.equalsSafely は,null チェックを含めた比較を
       // 行うためのヘルパー関数です.
    }
    public String toString()
    {
        return getClass().getName() + "[" +
            "first=" + first + "," +
            "second=" + second + "]";
    }
}

とかすると,テストで失敗したとき toString メソッドが呼ばれる
ので,assertEquals でどんなところが間違ったかすぐわかります.
# エラーメッセージの expected: <...> but was: <...>
#の<...> の部分が toString メソッドによる文字列表現

比較の方法が複数ある場合は,Adapter パターンを使って
equals と toString をオーバーライドします.