2009-10-29 22 views
16

現在、いくつかの表形式で取り込まれている複雑な一連のビジネスルールに対して非常に大きなテストスイートを作成する必要があります(たとえば、パラメータX Y Zがそうである場合、値はV1とV2の間でなければなりません)。各ルールには名前とそれ自身のセマンティクスがあります。JUnitテストケースとスイートをプログラムで生成することはできますか?

私の最終目標は、サブテストスイートに編成されたテストスイートを各ルールにテストケースを持つことです。

1つの選択肢は、これらすべてのルールをテストとして実際にハードコードすることです。それは醜い、時間のかかる、柔軟性のないものです。

もう1つは、ルールファイルを読み込んで単体テストでJavaクラスを生成するPythonスクリプトを書くことです。私はできればこれを避けたい。もう一つのバリエーションは、Jythonを使うことです。

しかし、理想的には、ファイルを読み込むテストスイートを用意しておき、その中でサブスイートとテストを定義するのが理想的です。これらのテストはそれぞれ、テーブルファイルから取得された特定の値で初期化され、システム内の固定エントリポイントを実行し、期待値に基づいて結果に対してバリデータ関数を呼び出します。

Javaのみを使用してこれを引き出す合理的な方法はありますか?

更新:私は私たちの種類の規則をいくらか簡略化しているかもしれません。それらのうちのいくつかは確かに表形式(Excel形式)であり、他はより曖昧です。しかし、私はおそらくこの問題を抱える最初の人ではないので、一般的な質問は残っています。

+0

これについて非常に興味があります。私はテストケースについてもっと知る必要があります。 – I82Much

答えて

17

JUnit 4では、Parameterized runnerを見てください。これは、あなたが記述する目的のために作成されました(データ駆動テスト)。しかし、それをスイートに編成することはしません。

Junit 3では、プログラムでTestSuitesとTestsを作成できます。答えはJunit Recipesで、必要に応じて展開できます(JUnit 4はJunit 3テストを実行できます)。

8

これはFITとお考えですか?

テーブルはすでに用意されているようですが、「ビジネスルール」は「ビジネスマンがExcelを使用して書き込む」のように聞こえます。

FITは、input-> expected output mappingsを持つテーブルに基づいてテストをチェックするシステムであり、これらのテストを実行するためのオープンソースのJavaライブラリが利用できます。

+0

また、Javaドライバもあります。 –

+0

それは私が言うつもりだったものです。あなたのケースは、フィット感のあるものとまったく同じように聞こえます。私はfitnesse(http://fitnesse.org)を推薦します。それは私が考えることができる最新の実装であるからです。 – Kevlar

+0

ありがとうございます。私はFITに精通していますが、新しい実装に精通していませんでした。私はそれらをチェックアウトします。それでも、JUnit内に留まるためのプログラム的な方法があるのだろうかと思います。 – Uri

1

私たちはFITを試して、Concordionに行くことに決めました。このライブラリの主な利点は次のとおり

  • 試験は
  • は、それらが標準のJUnitランナーによって実行される(例えば、Subversionリポジトリに)コード・ベースと一緒に確認することができる
0

私はJUnitを使って非常に似たようなことを書いていました。 XMLファイルに多数のテストケース(30ページ)がありました。別のテストを生成するのではなく、1回のテストですべてを実行しましたが、うまくいきました。私はあなたがその場でsaying--生成テストが何であるかを正確にやった、ルビーで

void setup() { 
    cases = read in the xml file 
} 

void test_fn_works() { 
    for case in cases { 
    assert(case.expected_result, fn(case.inputs), 
     'Case ' + case.inputs + ' should yield ' + case.expected_result); 

    } 
} 

私のテストでは、このようなものを見ました。Javaでこれを行うのは複雑ですが、それは別の、かなり合理的なアプローチがあるので、それが価値があるとは思いません。

これが役に立ちます。

関連する問題