2016-04-05 6 views
0

Connectionオブジェクトを返すメソッドを実装しました。Unit Connectionオブジェクトを返すメソッドのテスト

今、私はユニットテストその方法にしたいと私は典型的な

assertEquals(expectedConnection, actualConnection); 

を作るとき、それはエラーコードで失敗します。私はしてもオブジェクトとして渡されたテストを期待し

java.lang.AssertionError: expected [[email protected]] but found [[email protected]]

私はassertSameを使用していない理由は同じですが、それらは同じ特性を持っています(同じクラスの属性で同じ方法で構築されています)... Connectionオブジェクトをテストする方法はありますか?

NB:私は声明にあなたの助けを

感謝を返すメソッドのユニットテストと同じ問題を持っています!

+0

'assertEquals'は' connection.equals(theOtherConnection) 'を呼び出します。これはおそらく参照を比較するだけです(' assertSame'と同じになります)。結論:あなたはそれをすべて間違っている。まずこのテストでどの機能をアサートしようとしているのかを述べることから始めます。 – Dima

+0

@Arcones - あなたの出力に表示されているものから、スタック内の異なる**参照**をヒープ内の(異なるまたは同じ)オブジェクトと比較しています。私は正しいアサーションを得るために接続の属性を比較する必要があると言います。 – rafaelbattesti

答えて

0

assertEquals(expected、actual)は、オブジェクトのequalsメソッドを使用します。 SQLiteConnectionはObject classからequals()メソッドを継承します。

デフォルトのequals実装は、参照を比較して2つの参照が同じオブジェクトを参照しているかどうかをチェックするためです。これは失敗に結びついています。あなたのケースでは、両方の参照が別のオブジェクトを参照しているので、違いはハッシュコードです。

代わりにArgumentCaptorを使用して、実際のオブジェクトの値をキャプチャして比較することができます。 Here is an example

0

新しい接続を作成し、実際の接続と比較することをお勧めします。実際の接続をアサートするのではなく、ユーザー、パスワード、および接続文字列をアサートすることができます。

この場合、参照を比較していることは明らかです。 equals(Object o)からObjectクラスへのオーバーライドが正確になるクラスに対してのみアサートできるのは、SQLiteConnectionであり、Objectのequalsメソッドをオーバーライドしません。

関連する問題