PitaliumのJUnit拡張
概要
Pitaliumは複数のブラウザに対して同時にテストを実行するためJUnitのParemterized機能を拡張して利用しています。
通常のテストではテストクラス自体の開始や終了を @BeforeClass、@AfterClass、@ClassRule を使用することでハンドリングが出来ます。しかしParameterizedテストではこれらのアノテーションを使用するとテストクラス自体の開始や終了はハンドリングできますがパラメーター毎のテストクラスの開始や終了が分かりません。パラメーター毎のハンドリングを実現するためPitaliumではJUnitテストランナーの拡張を行っています。
アノテーション
@ParameterizedBeforeClass
テストクラス内のstaticメソッドに設定するアノテーションで、あるパラメーターのテストクラス開始前をハンドリングします。またメソッド引数にParameterizedのパラメーターを受けることができます。後述するPtlBlockJUnit4ClassRunnerWithParametersFactoryが必須です。
@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が必須です。
@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実装を使用してテストを実行します。
@Paramterized.UseParametersRunnerFactory(PtlBlockJUnit4ClassRunnerWithParametersFactory.class)
public class TestClass {
// ...
}