3

私は Eclipse の達人ではありませんので、私の不器用さをお許しください。

Eclipse で Assert.assertEquals(obj1,obj2) を呼び出して失敗した場合、IDE に obj1 と obj2 を表示させるにはどうすればよいですか?

私はJExampleを使用していますが、違いはないと思います。


編集:これが私が見たものです:(ソース:yfrog.com


4

6 に答える 6

6
  1. オブジェクトが少し複雑な場合、失敗トレースとの比較は簡単な作業ではありません。
  2. toString() を再定義していない場合は、デバッガーとの比較が役立ちます。各オブジェクトを両側から目で検査する必要があるため、ソリューションとしては依然として非常に面倒です。

Junit Eclipse プラグインは、障害が発生した場合にオプションを提供します: 「実際の結果を予想されるテスト結果と比較する」。このビューは、従来のコンテンツ比較ツールに十分近いものです。 String オブジェクトとの比較


問題は、オブジェクトを使用して記述assertEquals()した場合にのみ使用できることです (スクリーンショットでは、コーナーのオプションがクラス Stringなしで提案されていないことがわかります)。StringString オブジェクトがない場合の比較

アサーションでオブジェクトに使用できtoString()ますが、それは良い解決策ではありません:

  • 第一に、あなたは次のように相関toString()equals(Object)ます...一方の変更は、他方の変更を伴う必要があります。
  • 第二に、セマンティックはもはや尊重されません。toString()は、Java セマンティックでオブジェクトを識別するためではなく、1 つのオブジェクトの状態をデバッグするための便利なメソッドを返す必要があります ( equals(Object))。

私によると、JUnit Eclipse プラグインには機能が欠けていると思います。
比較が失敗した場合、オブジェクトを比較しない場合でも、メソッドStringに依存する 2 つのオブジェクトの比較を提供する必要がありますtoString()
2 つの等しくないオブジェクトを比較する最小限の視覚的な方法を提供できます。
もちろん、equals(Object)は必ずしも と相関しているわけではないのでtoString()、強調された相違点は目で調べる必要がありますが、それはすでに非常に優れた基礎であり、とにかく、比較ツールがないよりははるかに優れています。

于 2011-03-23T13:15:50.850 に答える
4

JUnit ビューの情報だけでは不十分な場合は、java.lang.AssertionError などにいつでも例外ブレークポイントを設定できます。テストを実行すると、例外が実際にスローされる直前にデバッガーが停止します。

于 2010-01-24T19:55:33.777 に答える
3

Assert.assertEquals()toString()期待されるオブジェクトと実際のオブジェクトの表現を、それがスローするメッセージに入れ、AssertionFailedErrorEclipseはそれをJUnitビューの「failuretrace」部分に表示します。

代替テキスト
(ソース:ibm.com

検査したい複雑なオブジェクトがある場合は、デバッガーを使用して、内部にブレークポイントを設定する必要がありますAssert.assertEquals()

于 2010-01-24T18:54:31.093 に答える
1

何を見てるの?

assertTrue()を実行して失敗すると、nullが表示されます。

ただし、assertEqualsを実行すると、期待した内容と実際に得られた内容が表示されるはずです。

JUnitを使用している場合は、JUnitビューを確認し、失敗したテストにマウスを移動していることを確認してください。

于 2010-01-24T18:54:59.373 に答える
1

FEST Assertは、比較するオブジェクトが文字列でない場合でも、アサーションが失敗した場合に比較ダイアログを表示します。ブログで詳しく説明しました。

于 2011-04-07T16:44:12.747 に答える
0

比較対象が文字列の場合は、スタック要素をダブルクリックすると、Eclipse の差分を示すダイアログがポップアップ表示されます。

ただし、これは文字列でのみ機能します。一般的なケースでは、本当の理由を確認する唯一の方法は、ブレークポイントをインストールしてそこにステップインすることです。

于 2015-02-04T09:26:56.990 に答える