2017-04-06 21 views
1

私は2つのリストオブジェクトを持ち、それぞれの最初の項目が等しいことを確認したいと思います。しかし、私はこの行でNullPointerExceptionが取得:assertEqualsはNullPointerExceptionをスローしますが、equalsメソッドは返されません

assertEquals(instance.getPlane(0), planes.get(0)); 

これは、全体のスタックトレースです:

テストケース:testGetPlane(mypackage.PlaneTest):ERROR
ヌル
れるjava.langの原因となりました.NullPointerException
mypackage.PlaneTest.testGetPlaneで (PlaneTest.java:60)

(ライン60はアサーションです)

これらのオブジェクトはどちらもnullです。私は仕事にデバッガを取得別の問題を抱えているので、代わりに私は私のテストケースにこれらのプリントアウトを追加しました:

System.err.println("equals? " + instance.getPlane(0).equals(planes.get(0))); 
System.err.println("equals? " + planes.get(0).equals(instance.getPlane(0))); 

しかし、これらの行は、エラーをスローせずに実行します!

私はこのプロジェクトをきれいにしてビルドし、Netbeansを再起動しましたが、まだこの問題があります。

JUnitはただエラーを投げていない私のプリントアウトとまったく同じものでなければならないexpected.equals(actual)を呼び出しますか?なぜassertEqualsはNullPointerExceptionをスローしますが、同じオブジェクト上にはequalsはありません。

答えて

1

(私は修正を発見したときに質問を単独で投稿していましたが、痛みがあったので、これは他の誰かを助けるかもしれないと希望して投稿しています。 。)

エラーは、エラーメッセージを作成しようとしたときにJUnitによって実際に引き起こされます。 the format function

、行がある:objがnullでない場合

String expectedString = String.valueOf(expected); 
String actualString = String.valueOf(actual); 
if (expectedString.equals(actualString)) { ... } 

String.valueOf(Object obj)戻りobj.toString()は。

私のオブジェクトのtoStringメソッドは、テスト内で決して設定されなかった "name"フィールドを返すだけでした。したがって、オブジェクトはnullではありませんでしたが、関数はnullを返しました。これにより、JUnitがexpectedString.equalsを呼び出そうとしたときにNullPointerExceptionが発生しました。 toStringがnullを返さないことを保証して、エラーを修正しました。

関連する問題