JUnitは何ですか?
cherami
JUnitは、オープンソースに記述し、反復可能なテストを実行して使用されるJavaのテストフレームワークです。彼はインスタンス(Java言語用)xUnitは単体テストフレームワークのシステムです。それには、次の機能が含まれています:
1、アサーション(アサーション)の予想される結果をテストするための
2、共有一般的なテストデータ、テストツール
3、組織の利便性と動作テストスイートのテストのための
4、グラフィックやテキストのテストランナー
JUnitは、もともとErich Gammaが(ゴフワン)とKent Beck(XPおよびパイオニアのリファクタリングのいずれか)を調製によって開発されました。
と、JUnitは一般的にユニットテストに使用されることに留意すべきであるため、他の(リファクタリング)を強く推奨されてXPのjunitのプログラミング、リファクタリングされ、(いわゆるホワイトボックステスト)テストされているコードの内部構造を理解する必要がありますツールは、自動ユニットテストケースは非常には、開発の効率を向上させることができますので、実際にもですこのようなものを使用し、利益を時間とエネルギー消費の多くを必要とするテストコードを書くのか?私はこれをされていることを信じている:
図1は、XPのプログラミングのための、あなたが関数やロジックのコード(メソッド)でコードを書く前に、適切に考えて強制的にしたり、コードが不安定である記述するコードを書く前にテストを記述するための呼び出し、その後は維持しながら、必要があるテストコードと実際のコードは、このワークロードが大幅に増加されます。したがって、XPのプログラミングでは、基本的なプロセスは以下です:アイデア - "テストコードを書く - "コードを記述する - "テスト、およびテストを記述するとコードを書くには、増分され、ほとんどのテストを書くことを、将来の準備のコード問題は、より多くのブロックは、問題を追跡することができますが見つからない場合、エラーリターンを補正することの難しさを減らす
再建も少しテストを、より少ない時間のかかるエラーを返すことにより変更する必要があるため2、再建のため、その利点およびXPのプログラミングは、似ています。
3、私たちは、JUnitテストを書くの適切な使用法を開発する非上記の2つの状況では、私たちはまた、必要がある一般的なテストでは、コードを記述するためには、JUnitを使用している場合、あなたは、元のJUnitを使用することはできませんが、に対しても、必要があるインターフェイスは、(メソッド)のテストコードの後にメソッド内での変更など、将来のメンテナンス作業を削減する準備する(これは、復興作業と同じです。)アサーションのjunitがあるので、テスト結果は、合格しないことをテストでは、私たちに教えてくれます通過しない場合、他のは、なぜ、以前は一般的には、いくつかのテストコードは、その出力を見て、正しい使用しての自分で結果を決定するために書き込みすることであり、場合JUnitの利点を使用して、この結果は、それが完了すると判断して正しいことは、我々は結果のみが、一般的には、効率が大きく改善されることができるかどうか、右が私たちを教えて、それを調べる必要があります。
JUnitをはじめ
cherami順序
インストールのJUnit
インストールは、まず新しいzipパッケージをダウンロードするには、次のアドレスは非常に簡単です:
http://download.sourceforge.net/junit/
ダウンロード後、あなたの好きなディレクトリに抽出し、仮定は、パッケージの下にjunit.jarをJUNIT_HOME、JUNIT_HOMEされているIDE環境のCLASSPATH環境変数は、システム、JUnitのプロジェクトの使用の増加の必要性に追加libには、その別のIDEの設定が異なる設定ではなく、言っても過言でいる。
どのようにテストを書いてJUnitを使用するには?
最も単純な例:
図1は、TestCaseのサブクラスを作成します:
パッケージjunitfaq;
インポートjava.utilの.*;
インポートjunit.framework .*;
パブリッククラスSimpleTestは{TestCaseを拡張
公共SimpleTestの(String name)名前{
(名)超;
}
2、期待される結果を主張するテストメソッドを書く:
公共ボイドtestEmptyCollection(){
コレクションコレクション=新しいArrayList();
(collection.isEmpty())のassertTrue;
}
注:JUnitテストのアプローチは、これらのメソッドは、自動的にテストで見つけることができるよう、テストするメソッドの先頭として推奨される。
3、動的testXxxxテストスイートのすべてが含まれているメソッドを作成するためにリフレクションを使用suite()メソッドを、書き込み:
パブリック静的テストスイート(){
戻り値新しいテストスイート(SimpleTest.class);
}
図4は、テストの操作を容易にするために、テキストモードのデバイスを実行するにはmain()メソッドを書く:
します。public static voidは、メイン{(文字列は[]を引数)
junit.textui.TestRunner.run(スイート());
}
}
テストの実行5:
テキストモードで実行します:
Javaのjunitfaq.SimpleTest
テスト結果はスルー:
。
時間:0
(1試験)[OK]を
時間は、小さなポイント数でテストを言ったテストでは、[OK]を表示されている場合。それ以外の場合は、マークFの背後にある小さな点は、テストが失敗したことを示します。
テスト結果の各々は、注文のテストを説明するためにので、[OK]をする必要があります失敗した情報はすぐに修正の指示に従いますするならば、成功しています。
JUnitテストレポートは成功していない場合には、障害(障害)とミス(エラー)を区別します。障害は、メソッドのコードは、assertに失敗であり、エラーはArrayIndexOutOfBoundsExceptionがのような異常コードが原因で発生します。
グラフィカルに実行します:
Javaのjunit.swingui.TestRunnerのjunitfaq.SimpleTest
一部に緑色のバーのグラフィカルなインターフェイスを介してテスト結果を表示します。
これらは、最も簡単なテストサンプルであり、実際のテストは、私たちはクラスの機能をテストして、必要なリソースの破壊(ネットワーク接続、データベース接続など、開いているファイルを閉じるの完了後に、しばしばいくつかの一般的な操作を実行する必要があるなど)、テストケースクラスはtestXxxxを実行されるsetUpメソッドとtearDownメソッドは、実行され、各testXxxxする前に、TestCaseのサブクラスのメソッドの準備でコンテンツをテストするために、セットアップ方法、および各メソッドの終了後、コンテンツの後始末の方法を提供してくれます。共有初期化コードはだけではなく、また、各テストコードの間の相互作用の可能性を排除します。
JUnitのベストプラクティス
Martin Fowler氏は言った:"あなたは、式をデバッグするいくつかの情報または印刷しようとすると、これらの伝統的な方法を置き換えるためにいくつかのテストコードを記述します。"最初は、あなたは常にいくつかの新しいフィクスチャを作成することを見いだし、テストプログラミングはあなたを遅くするようです。すぐ後に、しかし、もし、あなたが同じフィクスチャを繰り返すことに気付くでしょう新しいテストは通常、新しいテストメソッドを追加する必要です。
あなたは、テストコードの多くを書くことができますが、すぐにテストのほんの一部を本当に便利です心に描くことがわかります。あなたは、そのあなたがそれらのテストを失敗しないと思う、失敗するテストですテストする必要があるか、あなたは彼らが成功のテストに失敗だと思います。
我々は以前のテストに述べたように中断することなくプロセスです。したら、テストを持って、あなたは自分の仕事は、新しいコードを追加することによってあなたの仕事をテストするためにされていることを確認する必要があります。数日おきに、または最後のテスト日、あなたはこのテストコードを実行する必要があります実行しないでください。この投資は非常に小さいですが、それはあなたが信頼性の高いコードを取得することを保証するために作業することができます。あなたのリワーク率を減らすには、コードを動作記述に多くの時間を必要があります。
その圧力は、テストコードを記述しないと思うしないでください。代わりに、コードを記述してテストする必要があります、テストコードでは、徐々にストレスを軽減する書き込みは、クラスの理解の正確な動作を持っています。あなたが効率的に動作するようにコードを書くことが速くなります。
ここでは、テストコードやグッドプラクティスを書くのにいくつかの特定のスキルがあります:
1は、テストケースのコンストラクタは、フィクスチャを初期化は使用しないでくださいではなく、setUp()およびtearDown()メソッドを使用します。
2に依存しない、またはベクターを使用してJUnitテストメソッドは、保存されたので、テストの順序は、実行されることを前提としています。だから、さまざまなプラットフォームは、Vectorテストメソッドから削除するには、異なる順序になります。
3。TestCaseの準備の副作用を避けるために。例:次のテストは特定のトランザクションデータに依存している場合は、トランザクションデータを送信しないでください。その上にロールバックするだけだろう。
4時のテストクラスは、スーパークラスにsetUp()およびtearDown()メソッドを呼び出すことを忘れないでください継承しないようにします。
同時にコンパイルしながら、更新5は、コードと一緒に動作するコードをテストします。(JUnitをAntを使用してタスクをサポートしていた。)
6テストクラスとテストメソッドは、一貫した命名規則を持っている必要があります。テストでの作業クラス名は、テストクラス名を形成する場合。
7、テストは、テストに使用される古いデータに依存しない、時間の独立していることを確認してください。プロセスの後続のメンテナンスの結果は、テストを再現することは困難である。
図8は、あなたが国際市場向けのソフトウェアを書いている場合は、テストの準備は、国際的な要因を考慮する。テストだけでなく、ネイティブロケール。
9。はるかにJUnitの使用を提供することができるように/メソッド、コードをより簡潔にすることができます例外処理の方法を失敗主張するように。
10テストでは、可能な限り高速の実装として小さくする。
JUnitとAntの組み合わせ
cheramiリンク
アリは、2つのターゲットを提供しています:JUnitとjunitreport
、すべてのテストケースを実行し、HTML形式のレポートを生成する
次の手順を実行するには:
junit.jarを1。ANT_HOMElibディレクトリ
2次の行を追加し、build.xmlを変更:
フォーク"オン"の property name="report" value="report" / の target name="junitreport" depends="clean, compile" 未満junitのprintsummary ="refid="myclasspath"/ formatter type="xml"/ 未満 classpath true"をhaltonfailure ="false"をfailureproperty ="tests.failed"showoutput ="真の" をtodirのは、"$は{レポート}" をdir="${build}" はname="**/*Test.*"/ 未満を include fileset = batchtest /セット の未満は/ batchtest 未満は/ junitの の junitreportのtodir="${report}" fileset dir="${report}" の未満は、name ="テストを含めるtests.failed -*は、xml =""場合は/ a をの未満は/セット report format="frames" todir="${report}"/ 未満は/ junitreportの の未満は失敗"; --------------------------------------------------------- 1つ以上のテストは、詳細のレポートを確認し、失敗しました... ---------------------------------------------------------未満/ターゲット 未満は/失敗
このターゲットを実行して、アリは、各テストケースを実行する
ディレクトリには、レポートではTEST *. xmlといくつかのページがたくさんある
あなたが一目で非常に直感的なテストの実行レポートを見ることができるレポートディレクトリのindex.htmlを開きます。