質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

2828閲覧

(JUnit4)同じテストメソッドに複数のパターンでパラメータを渡したい

korm

総合スコア20

JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2014/08/08 03:03

JUnit4のテストコードを最近書き始めた者です。
同じテストメソッドに複数のパターンでパラメータを渡したいのですが、パターンごとに1つ1つ個別で事前パラメータを準備すると、コード量が膨大になってしまいます。

効率の良いテストコードの書き方があるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

hikari23

総合スコア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

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

korm

2014/08/22 02:05

回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問