JUnit4でParameterized.classを使ったテスト
1つのテストコードを、何種類かのパラメータで試験したい場合がある。
例えば、今まではテスト対象メソッドを呼び出す際の引数とか期待値が違うだけで、
テストメソッドをコピペして作成していたけど、これを使うとそんな必要がなくなる。
コードはこんな感じ。
これを実行すると、@Parametersで指定したパラメータ分
@RunWith(Parameterized.class)
public class ParameterizedTest {
@Parameters
public static Collection data() {
List
@Testのメソッドが実行されるようになる。
このコードの場合は、testメソッドが3回実行される。
ポイントとしては
- @RunWith(Parameterized.class)を指定する。
- @Parametersを指定してCollectionを返却するstaticメソッドを作成する。
- @Parametersのメソッドで、パラメータのObject配列のCollectionを返却するようにする。
- コンストラクタでパラメータを受け取る。
といった感じ。
デメリットは、テストが失敗した際にどのパラメータで失敗したかが少しだけわかりにくくなるのと、
決まったパターン以外のテストは別のクラスに書かなきゃいけないこと。
(別にこのクラスに書いても大丈夫だけど、無駄にパラメータ数分実行される)
あと、@BeforeClassと@AfterClassのメソッドがあった場合、
ちゃんと1回しか実行されないようになっているみたいです。