50個のテストを生成する@Parameterized
junitテストがあります。
@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
または同様のものを構成するだけです。
Eclipseは(Mars M4リリースの時点で)Parameterizedテストクラスからの単一のテストだけでなく、あらゆる種類のサブツリーを実行できるようになりました。
これは次のようになります。
また、すでに述べたように、起動構成内にファイルされた「メソッド」テキストにテスト名を入力することによって、テストを指定することもできます。メソッドが存在しないことを示すマーカーが表示されますが、テストはとにかく実行されます。
詳細については、 このブログ投稿 を参照してください。
私はこれをEclipseで、テスト#4で常に失敗する単純なパラメーター化されたテストでテストしました。失敗したテストを右クリックして、Runを選択できます。その後、そのテストのみが実行されます。
結果:
苛立たしいことに、Eclipseが問題を解決するために何をしたのかわかりません。実行構成では明らかに何も変更されていません。特に、構成を2回実行することを選択した場合は、すべてのテストが実行されます。
さらにいくつかのテストでは、Eclipseが10個のパラメーター値すべてを再生成するが、4番目の値のみを使用することが示されています。 (これは、printステートメントを@Parameters
メソッドに埋め込むことによって決定されました)。
それが役立つかどうかはわかりませんが、EclipseとJUnitのパラメーター化されたテストで使用したトリックを試すことができます。
「テストメソッド」フィールドのJUnit起動構成で、パラメーター化されたテストのフルネームを書き込むことができます。この例では、「solveDataFile [28:/ path/to/your/file]」のようになります。 Eclipseはメソッドが存在しないと文句を言いますが、それでも正常にランチします。
テストのサブセットについては、ex(27&28)を追加するだけです。
`.subList( startInclusive, stopExclusive );`
パラメータコレクションを返す前に。
連続していないサブセット:
Collection<Object[]> c = Arrays.asList( data ).subList( startInclusive, stopExclusive );
c.add( another subset );
return c;
Miguelの回答と同様に、JUnit5を使用している場合
@ParameterizedTest
@CsvFileSource(resources = arrayOf("/sender.csv"))
csvファイルに移動し、#
文字を前に付けることで、いくつかの行を「コメントアウト」できます。