JUnit4のテストコードを最近書き始めた者です。
同じテストメソッドに複数のパターンでパラメータを渡したいのですが、パターンごとに1つ1つ個別で事前パラメータを準備すると、コード量が膨大になってしまいます。
効率の良いテストコードの書き方があるのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
@RunwithアノテーションにTheories.classを指定すると、パラメータ化の処理とテストメソッドの処理を分離できます。
以下のように、パラメータ化するテストデータは@DataPointsアノテーションで準備しておき、テストメソッドに@Theoryを指定します。
そうするとテスト実行時にパラメータのパターン数分、@Theoryの指定されたテストメソッドを繰り返し実行してくれます。
(※@DataPointsはstaticかつpublicのフィールドまたはメソッドにする必要があります。)
(例:JUnitテストクラス)
`
@RunWith(Theories.class)
public class SampleTest {
@DataPoints
public static int[][] PARAMS = {
{0, 0, 0},
{0, 2, 2},
{2, 0, 2},
{4, 5, 9},
};
@Theory
public void add(int[] calcValue) throws Exception {
MyCalc sut = new MyCalc();
assertThat(sut.addValue(calcValue[0], calcValue[1]), is(calcValue[2]));
}
}
`
(例:テスト対象クラス)
public class MyCalc { public int addValue(int a, int b) { return a + b; } }
投稿2014/08/09 07:30
総合スコア110
0
ベストアンサー
パターンが網羅しやすいようなヘルパーメソッドを書いて、それを呼ぶようにするのはどうでしょう。
コンストラクターだけでは十分に初期化ができないようなクラスをパラメーターにする場合、パラメーターをビルドするメソッドにしても良いです。
さらに複雑なパターンの場合は、assert自体をヘルパーメソッドに持たせます。(コードは割愛)
`
// A#fooのテスト
@Test
public void testFoo() {
// expectedとパラメーターを配列にしたほうがパターン作りやすいかも
assertEquals("ABC", foo0(1, 2, 3));
}
private static String foo0(int i, int j, int k) { A o = newA(i, j, k); return o.foo(); } // B.bar(A)のテスト @Test public void testBar() { assertEquals("ABC", B.bar(newA(1, 2, 3))); } private static A newA(int i, int j, int k) { A o = new A(); o.setI(i); o.setJ(j); o.setK(k); return o; }
`
投稿2014/08/10 14:25
総合スコア9388
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。