Index: [Article Count Order] [Thread]

Date:  Mon, 9 Oct 2000 01:51:09 +0900
From:  Kaoru Hosokawa <khosokawa@....com>
Subject:  [XP-jp:01048] Re: テストのためだけのメソッド
To:  extremeprogramming-jp@....jp (extremeprogramming-jp ML)
Message-Id:  <B606D3A1.3D84%khosokawa@....com>
In-Reply-To:  <NEBBLCBLMJKDLAMIAMIGKEAPCLAA.mishii@....jp>
Posted:  Mon, 09 Oct 2000 01:47:30 +0900
X-Mail-Count: 01048

ホソカワです。

on 00.10.2 10:15 AM, Masaru Ishii at mishii@....jp wrote:

> 石井です.
> 
>>> デバッグのためだけに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 をオーバーライドします.

toString() をオーバーライドすることによって、JUnit の吐き出すメッセージが読
みやすくなると言うことですね。デバッグが楽になると言うことで、私は、いいと思
います。

equals() は、「テストのためだけのメソッド」でしょうか?そうなると私は、別ク
ラス(ヘルパークラス)に入れたいです。

class PairTestHelper {
    public boolean equals(Pair a, Pair b) {
        return a.getFirst() == b.getFirst() &&
            a.getSecond() == b.getSecond();
    }
}

getFirst() と getSecond() が必要になってきますが…

「テストのためだけのメソッド」は、get 型だけで充分なのか、どうか、今、考えて
います。

-- 
Kaoru Hosokawa
khosokawa@....com