JUnitでデータ駆動型テストを作成するには何を使用しますか?
(私の定義)データ駆動型テストは、外部ソース(ファイル、データベースなど)からデータを読み取り、行/ファイル/その他ごとに1つのテストを実行し、テストランナーに結果を表示するテストです。個別のテストがありました-各実行の結果は、1つの大きな集合体ではなく、個別に表示されます。
JUnit4では、 Parameterized testrunnerを使用してデータ駆動型テストを実行できます。
あまりよく文書化されていませんが、基本的な考え方は、オブジェクト配列のコレクションを返す静的メソッド(@Parameters
で注釈された)を作成することです。これらの各配列は、テストクラスコンストラクターの引数として使用され、コンストラクターに設定されたフィールドを使用して通常のテストメソッドを実行できます。
@Parameters
メソッドで外部テキストファイルを読み取って解析する(または別の外部ソースからデータを取得する)コードを記述して、テストを再コンパイルせずにこのファイルを編集することで、新しいテストを追加できます。
これは、@ DataSourceを備えたTestNGが優れている点です。それが私がJUnitよりも好む理由の1つです。その他は、依存関係と並列スレッドテストです。
あなたのニーズに合った "DataDrivenTestCase"でTestCaseを拡張したほうがいいです。これが実際の例です: http://mrlalonde.blogspot.ca/2012/08/data-driven-tests-with-junit.html
パラメータ化されたテストとは異なり、わかりやすい名前のテストケースが可能です。
私は@ DroidIn.netと一緒にいますが、それはまさに私がやっていることですが、質問に文字通り「そして、別のテストがあるかのようにテストランナーに結果を表示する」には、JUnit4パラメーター化ランナーを見る必要があります。 DBUnitはそれを行いません。これをたくさん行う必要がある場合、正直なところ、TestNGはより柔軟ですが、JUnitで完全に実行できます。
JUnit理論のランナーも見ることができますが、私の思い出は、データドリブンデータセットには適さないということです。JUnitは大量の外部データを扱うことを目的としていないため、これはある種の意味があります。
これはかなり古いトピックですが、私は自分のシェアを貢献することを考えました。 JUnitによるデータ駆動型テストのサポートは、あまりにも親しみが少ないと感じています。たとえば。パラメータ化を使用するには、コンストラクタを作成する必要があります。 Theories runnerでは、テストメソッドに渡される一連のテストデータを制御できません。
このブログ投稿シリーズで特定されているように、さらに欠点があります: http://www.kumaranuj.com/2012/08/junits-parameterized-runner-and-data.html
現在、JUnitから拡張されたフレームワークであり、ユーザーに多くの機能を提供することを目的としたEasyTestの形で、包括的なソリューションが提供されています。その主な焦点は、JUnitを使用してデータ駆動型テストを実行することですが、JUnitに実際に依存する必要はありません。これが参照用のgithubプロジェクトです: https://github.com/anujgandharv/easytest
誰かが自分の考え/コード/提案を提供することに興味があるなら、今がその時です。単純にgithubリポジトリに移動して問題を作成できます。
一部のテストは、インターフェイス駆動型に適しています。
データベース/ファイルの読み取りがインターフェース呼び出しによって取得される場合、インターフェースを実装するためのユニットテストを取得するだけで、ユニットテストクラスは必要なデータを返すことができます。
現在、ID番号を含むpropsファイルがあります。これはひどくもろいですが、何かを始めるのは簡単です。私たちの計画は、最初にこれらのID番号をantビルドの-Dプロパティでオーバーライドできるようにすることです。
私たちの環境では、実行前に(たとえばdbUnitによって)ロードできない、ひどく絡み合ったデータを持つレガシーDBを使用しています。最終的に、単体テストがDBにクエリを実行してテスト対象のプロパティを持つIDを検索し、そのIDを単体テストで使用する場所に到達したいと考えています。遅くなり、より適切には「単体テスト」ではなく統合テストと呼ばれますが、アプリがテストデータに対して完全に実行されても実際のデータで失敗する状況を回避するために、実際のデータに対してテストします。
通常、データ駆動型テストでは、テスト可能な小さなコンポーネントを使用してデータを処理します。 (ファイル読み取りオブジェクト、またはモックオブジェクト)データベースの場合、およびアプリケーション外部のリソースは、他のシステムを模倣するために使用されます。 (Webサービス、データベースなど)。通常、データと出力を処理する外部データファイルがあることがわかります。このようにして、データファイルをVCSに追加できます。