開発者ブログ

PitaliumのJUnit拡張

Last modified by nakatani on 2017/03/08, 15:24

概要

Pitaliumは複数のブラウザに対して同時にテストを実行するためJUnitのParemterized機能を拡張して利用しています。  
通常のテストではテストクラス自体の開始や終了を @BeforeClass、@AfterClass、@ClassRule を使用することでハンドリングが出来ます。しかしParameterizedテストではこれらのアノテーションを使用するとテストクラス自体の開始や終了はハンドリングできますがパラメーター毎のテストクラスの開始や終了が分かりません。パラメーター毎のハンドリングを実現するためPitaliumではJUnitテストランナーの拡張を行っています。

アノテーション

@ParameterizedBeforeClass

テストクラス内のstaticメソッドに設定するアノテーションで、あるパラメーターのテストクラス開始前をハンドリングします。またメソッド引数にParameterizedのパラメーターを受けることができます。後述するPtlBlockJUnit4ClassRunnerWithParametersFactoryが必須です。

@RunWith(Paramterized.class)
@Parameterized.UseParametersRunnerFactory(PtlBlockJUnit4ClassRunnerWithParametersFactory.class)
public class SampleTest {

   @Parameterized.Parameters
   public static Collection<Object[]> parameters() {
       return Arrays.asList(new Object[] { 0 }, new Object[] { 1 });
   }

   @ParameterizedBeforeClass
   public static void parameterizedBeforeClass(int param) throws Exception {
       // ...
   }

}

@ParameterizedAfterClass

テストクラス内のstaticメソッドに設定するアノテーションで、あるパラメーターのテストクラス終了後をハンドリングします。またメソッド引数にParameterizedのパラメーターを受けることができます。後述するPtlBlockJUnit4ClassRunnerWithParametersFactoryが必須です。

@RunWith(Paramterized.class)
@Parameterized.UseParametersRunnerFactory(PtlBlockJUnit4ClassRunnerWithParametersFactory.class)
public class SampleTest {

   @Parameterized.Parameters
   public static Collection<Object[]> parameters() {
       return Arrays.asList(new Object[] { 0 }, new Object[] { 1 });
   }

   @ParameterizedAfterClass
   public static void parameterizedAfterClass(int param) throws Exception {
       // ...
   }

}

@ParamterizedClassRule

テストクラス内のstaticフィールドに設定するアノテーションで、あるパラメーターのテストクラス開始前、終了後をハンドリングします。Parameterizedのパラメーターを受けることができます。フィールドはParameterizedTestRuleを実装したクラスでなければなりません。後述するPtlBlockJUnit4ClassRunnerWithParametersFactoryが必須です。  
ParameterizedTestRuleの抽象実装としてParameterizedTestWatcherが用意されています。  
 
Pitaliumでは@ParamterizedClassRuleをWebDriverのクローズに使用しています。

テストランナー

PtlBlockJUnit4ClassRunnerWithParameters

Paramterizedなテストにおいて @ParamterizedBefore、@ParamterizedAfter、@ParameterizedClassRule を使用するために必要なテストランナーです。ファクトリクラス経由で使用されます。JUnit 4.12以降が必要です。  
このランナーではParamterizedの各アノテーションに対応するStatement実装を使用してテストを実行します。

@RunWith(Parameterized.class)
@Paramterized.UseParametersRunnerFactory(PtlBlockJUnit4ClassRunnerWithParametersFactory.class)
public class TestClass {
   // ...
}

Copyright (C) 2012-2017 NS Solutions Corporation, All Rights Reserved.