31

jUnitでデータ駆動型テストを作成するために何を使用しますか?

(私の定義)データ駆動型テストは、外部ソース(ファイル、データベースなど)からデータを読み取り、行/ファイルなどごとに1つのテストを実行し、結果をテストランナーに表示するテストです。個別のテストがありました。各実行の結果は、1つの巨大な集計ではなく、個別に表示されます。

4

10 に答える 10

40

JUnit4では、パラメーター化されたテストランナーを使用して、データ駆動型テストを実行できます。

あまり文書化されていませんが、基本的な考え方は@Parameters、オブジェクト配列のコレクションを返す静的メソッド(で注釈が付けられている)を作成することです。これらの各配列は、テストクラスコンストラクターの引数として使用され、コンストラクターで設定されたフィールドを使用して通常のテストメソッドを実行できます。

メソッド内の外部テキストファイルを読み取って解析する@Parameters(または別の外部ソースからデータを取得する)コードを記述し、テストを再コンパイルせずにこのファイルを編集することで新しいテストを追加できます。

于 2009-11-30T21:36:51.233 に答える
10

ここで、TestNGとその@DataSource輝きがあります。それが私がそれを好む理由の1つJUnitです。その他は、依存関係と並列スレッドテストです。

于 2009-11-30T23:30:31.377 に答える
8

hsqldbなどのインメモリデータベースを使用して、データベースに「本番スタイル」のデータセットを事前入力するか、空のhsqldbデータベースから開始して、実行する必要のある行を入力します。テスト。その上で、 JUnitMockitoを使用してテストを作成します。

于 2009-11-30T21:55:58.220 に答える
4

私はdbUnitjMock、jUnit 4の組み合わせを使用しています。その後、スイートとして、または個別にエーテル実行できます。

于 2009-11-30T20:56:16.073 に答える
3

ニーズに合ったを拡張TestCaseすることをお勧めします。DataDrivenTestCase

実例は次のとおりです:http: //mrlalonde.blogspot.ca/2012/08/data-driven-tests-with-junit.html

パラメータ化されたテストとは異なり、適切な名前のテストケースが可能です。

于 2012-08-24T23:44:32.103 に答える
1

私は@DroidIn.netを使用していますが、これはまさに私が行っていることですが、「個別のテストがあるかのようにテストランナーに結果を表示する」という質問に文字通り答えるには、JUnit4パラメーター化ランナーを確認する必要があります。DBUnitはそれを行いません。これをたくさん行う必要がある場合は、正直なところTestNGの方が柔軟性がありますが、JUnitで絶対に実行できます。

JUnit Theoriesランナーも見ることができますが、私の記憶では、JUnitは大量の外部データを処理することを目的としていないため、データ駆動型データセットには適していません。

于 2009-11-30T23:11:42.570 に答える
1

これはかなり古いトピックですが、私はまだ自分のシェアに貢献することを考えていました。データ駆動型テストに対する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リポジトリにアクセスして、問題を作成するだけです。

于 2012-08-20T13:24:17.570 に答える
0

現在、ID番号を含むpropsファイルがあります。これはひどくもろいですが、何かを始めるのは簡単です。私たちの計画では、最初にこれらのID番号をantビルドの-Dプロパティでオーバーライドできるようにする予定です。

私たちの環境では、実行前に(たとえばdbUnitによって)ロードできない、ひどく絡み合ったデータを持つレガシーDBを使用しています。最終的には、単体テストがDBにクエリを実行して、テスト対象のプロパティを持つIDを見つけ、そのIDを単体テストで使用する場所に到達したいと考えています。それは遅く、より適切には「単体テスト」ではなく統合テストと呼ばれますが、アプリがテストデータに対して完全に実行されるが、実際のデータでは失敗する状況を回避するために、実際のデータに対してテストします。

于 2009-11-30T21:28:15.760 に答える
0

通常、データ駆動型テストでは、テスト可能な小さなコンポーネントを使用してデータを処理します。(ファイル読み取りオブジェクト、またはモックオブジェクト)データベースの場合、およびアプリケーションモックの外部のリソースは、他のシステムを同化するために使用されます。(Webサービス、データベースなど)。通常、データと出力を処理する外部データファイルがあることがわかります。このようにして、データファイルをVCSに追加できます。

于 2009-11-30T20:55:42.523 に答える
0

一部のテストは、インターフェース駆動型であることに役立ちます。

データベース/ファイルの読み取りがインターフェイス呼び出しによって取得される場合は、ユニットテストを取得してインターフェイスを実装するだけで、ユニットテストクラスは必要なデータを返すことができます。

于 2009-11-30T22:52:19.210 に答える