JUnitでデータ駆動型のパラメータ化メソッドを作成したいと考えています。クラス全体だけでなく、JUnitでのパラメータテストメソッド
私が見る例では、クラスの全体をパラメータ化しています。
など。
@RunWith(Parameterized.class)
public class PrimeNumberCheckerTest {
しかし、私は、単一のテスト方法、全体ではなくクラスをパラメータしたいと思います。 TestNGので
は、そのようなことは、このように見えるように思える:
@DataProvider(name = "test1")
public static Object[][] primeNumbers() {
return new Object[][] {{2, true}, {6, false}, {19, true}, {22, false}, {23, true}};
}
// This test will run 4 times since we have 5 parameters defined
@Test(dataProvider = "test1")
public void testPrimeNumberChecker(Integer inputNumber, Boolean expectedResult) {
System.out.println(inputNumber + " " + expectedResult);
Assert.assertEquals(expectedResult,
primeNumberChecker.validate(inputNumber));
}
はJUnitの中にそのようなことは可能ですか?
EDIT:
最もエレガント/ DRYの方法は、単一のメソッドレベルの注釈持っているだろう - 私は願っていますものです。
は、私がライブラリを見つけた:
https://github.com/Pragmatists/junitparams
例:
@RunWith(JUnitParamsRunner.class)
public class PersonTest {
@Test
@Parameters({"17, false",
"22, true" })
public void personIsAdult(int age, boolean valid) throws Exception {
assertThat(new Person(age).isAdult(), is(valid));
}
}
疑問が残っている - JUnitのに組み込まれているようなものがありますか?
そうでなければ、ボイラープレートコードまたはクラスレベルの歪みを最小限に抑えることができる最も近いビルトイン物は何ですか?
感謝。しかしこれはかなりオーバーヘッドのようです。私は単一のメソッドレベルのアノテーションを望んでいました...ここのように - https://github.com/Pragmatists/junitparams。 – KarolDepka
私はこれらの発言を私の質問の「編集」セクションにも追加しました。 – KarolDepka
私は自明ではありませんが、外部クラスそのものをサブスイートの1つとして使うことができます: '@ Suite.SuiteClasses({MyFooTest.class、MyFooTest.WithParams.class})'。そうすることで、パラメータ化されたテストだけが独自のクラスを必要とし、少なくともオーバーヘッドの一部が削減されます。それは多くのように感じる、私は同意する。私が知る限り、これはジュニットとの最善の方法です。 – yshavit