web-dev-qa-db-ja.com

JUnitパラメーター化テスト:IntelliJ / Eclipseから特定のテストを1つだけ実行するにはどうすればよいですか?

50個のテストを生成する@Parameterizedjunitテストがあります。

@RunWith(Parameterized.class)
public class NurseRosteringSolveAllTurtleTest ... {

    @Parameterized.Parameters(name = "{index}: {0}")
    public static Collection<Object[]> getSolutionFilesAsParameters() {
        return ... // returns 50 Files.
    }

    public NurseRosteringSolveAllTurtleTest(File unsolvedDataFile) {
        ...
    }

    ...

    @Test
    public void solveDataFile() {
        ...
    }

}

実行には1時間かかります(その時間を短縮することは不可能です。統合テストです)。テスト28は失敗します。

他の49のテストを実行せずに、テスト28を単独で実行するにはどうすればよいですか?実際のコードを変更せずに、IntelliJ(またはEclipse)の実行構成で-Dまたは同様のものを構成するだけです。

32

Eclipseは(Mars M4リリースの時点で)Parameterizedテストクラスからの単一のテストだけでなく、あらゆる種類のサブツリーを実行できるようになりました。

これは次のようになります。

  • @ Parameterized-methodによって返される単一のデータセットのすべてのメソッド
  • 単一の@Testメソッドのすべてのデータセット

また、すでに述べたように、起動構成内にファイルされた「メソッド」テキストにテスト名を入力することによって、テストを指定することもできます。メソッドが存在しないことを示すマーカーが表示されますが、テストはとにかく実行されます。

詳細については、 このブログ投稿 を参照してください。

5
Moritz Eysholdt

私はこれをEclipseで、テスト#4で常に失敗する単純なパラメーター化されたテストでテストしました。失敗したテストを右クリックして、Runを選択できます。その後、そのテストのみが実行されます。

test output

結果:

just test 4

苛立たしいことに、Eclipseが問題を解決するために何をしたのかわかりません。実行構成では明らかに何も変更されていません。特に、構成を2回実行することを選択した場合は、すべてのテストが実行されます。

さらにいくつかのテストでは、Eclipseが10個のパラメーター値すべてを再生成するが、4番目の値のみを使用することが示されています。 (これは、printステートメントを@Parametersメソッドに埋め込むことによって決定されました)。

22
Duncan Jones

それが役立つかどうかはわかりませんが、EclipseとJUnitのパラメーター化されたテストで使用したトリックを試すことができます。

「テストメソッド」フィールドのJUnit起動構成で、パラメーター化されたテストのフルネームを書き込むことができます。この例では、「solveDataFile [28:/ path/to/your/file]」のようになります。 Eclipseはメソッドが存在しないと文句を言いますが、それでも正常にランチします。

3
duemir

テストのサブセットについては、ex(27&28)を追加するだけです。

`.subList( startInclusive, stopExclusive );`

パラメータコレクションを返す前に。

連続していないサブセット:

Collection<Object[]> c = Arrays.asList( data ).subList( startInclusive, stopExclusive );
c.add( another subset );
return c;
2
Miguel Pereira

Miguelの回答と同様に、JUnit5を使用している場合

@ParameterizedTest
@CsvFileSource(resources = arrayOf("/sender.csv"))

csvファイルに移動し、#文字を前に付けることで、いくつかの行を「コメントアウト」できます。

1
user7610