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