次のテストケースに進む前に、異なるデータで特定のテストケースを連続して複数回実行するようにJUnitに指示する方法はありますか?
junit 4.4理論 を見てください:
import org.junit.Test;
import org.junit.experimental.theories.*;
import org.junit.runner.RunWith;
@RunWith(Theories.class)
public class PrimeTest {
@Theory
public void isPrime(int candidate) {
// called with candidate=1, candidate=2, etc etc
}
public static @DataPoints int[] candidates = {1, 2, 3, 4, 5};
}
これは、パラメータ化されたテストの完璧な候補のようです。
しかし、基本的に、パラメータ化されたテストでは、異なるデータに対して同じテストセットを実行できます。
それについてのいくつかの良いブログ投稿があります:
最近、私は zohhak プロジェクトを開始しました。次のように記述できます。
@TestWith({
"25 USD, 7",
"38 GBP, 2",
"null, 0"
})
public void testMethod(Money money, int anotherParameter) {
...
}
より良い方法(複数のテストメソッドを使用できるようにする)は、JUnitをJUnitParamsで使用することです。
import junitparams.Parameters;
import org.junit.Test;
@RunWith(JUnitParamsRunner.class)
Public class TestClass() {
@Test
@Parameters(method = "generateTestData")
public void test1(int value, String text, MyObject myObject) {
... Test Code ...
}
.... Other @Test methods ....
Object[] generateTestData() {
MyObject objectA1 = new MyObject();
MyObject objectA2 = new MyObject();
MyObject objectA3 = new MyObject();
return $(
$(400, "First test text.", objectA1),
$(402, "Second test text.", objectA2),
$(403, "Third test text.", objectA3)
);
}
}
Junitparamsプロジェクトを取得できます here 。
これは、コード例を使用してテストを繰り返し実行するいくつかの方法を示した投稿です。
@Parametrizedランナーを使用するか、投稿に含まれている特別なランナーを使用できます
パラメーターに基づいてテストを実行するヘルパーメソッドを常に作成し、JUnitテストメソッドからそのメソッドを呼び出します。通常、これは単一のJUnitテストメソッドが実際に多くのテストを実行することを意味しますが、それは私にとって問題ではありませんでした。個別の呼び出しごとに1つずつ、複数のテストメソッドが必要な場合は、テストクラスを生成することをお勧めします。
テストクラスで既に@RunWith
を使用している場合は、おそらく this を調べる必要があります。
カスタムランナーが不要または使用できない場合(たとえば、Robolectricランナーなどの別のランナーを既に使用している場合)、これを試すことができます DataSet Rule 。