ホソカワです。
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