テストランナーの選び⽅
テストランナーとは1
u ⽤語の意味
u テストコードの実⾏を制御するコンポーネント
u ⼀般的に、下記機能を有する他のコンポーネントと協調して構成される
u テストケースの収集
u テストの検証
u 検証結果の出⼒
u しかし、上記はこれまでの経験に基づく個⼈的な⾒解に過ぎません
テストランナーとは2
u テストツールの機能概要(JUnit4.13より)
u 処理対象の識別 FrameworkMembers、FrameworkMethod
u テスト TestClass
u テストケース TestClassのメソッド(FrameworkMethodで識別出来る)
u テスト実⾏順の整理役 Statement
u テストケースの実⾏役 Runner
u 例
u org.junit.runners.BlockJUnit4ClassRunner
u org.junit.internal.runners.JUnit38ClassRunner
u テストの検証役 Assert
u テストで発⽣したイベントの通知役 RunNotifier
u テストで発⽣したイベントの取得役 RunListener
テストランナーとは3
u テストツールの構成図
u 相当抽象化してる為、詳細はJavaDocまたはGitHubご覧ください
u JUnit4.13 を例に挙げていますが、他のツールはこの限りでない場合があります
テスト TestClass
処理対象の識別
FrameworkMembers
テスト実⾏順の整理役
Statement
テストケース TestClassのメ
ソッド
処理対象の識別
FrameworkMembers
テストの検証役 Assert
テストケースの実⾏役 Runner
テストで発⽣したイベントの
通知役 RunNotifier
テストで発⽣したイベントの
取得役 RunListener
テストツールの⽐較に基づく必要機能
u ⽐較結果から共通するコンポーネントを必要な機能として抽出します
コンポーネント JUnit4.13 TestNG6.9.12 その他
テスト
○ ○
処理対象の識別
○ ○
テスト実⾏順の整理役
○ ?
テストケース
○ ○
処理対象の識別 (メソッド)
○ ○
テストの検証役
○ ○
テストケースの実⾏役
○ ○
テストで発⽣したイベントの通知役
○ ○
テストで発⽣したイベントの取得役
○ ○
テストツールのユースケース
u 処理対象を識別する
u 処理対象をテストと事前事後処理に区別する
u 区別した処理対象のうち、テストケースの実⾏順を決定する
u 決定した順番にテストケースを実⾏する
u テストケース毎に想定結果と実⾏結果を検証する
u テストケース毎に検証結果を通知する
u 補⾜の確認事項
u 利⽤する組織の要求を、上記ユースケースで踏襲出来るか確認します
u 想定する範囲とツールを活⽤して⾃動化できる範囲に差異がないか
u ツールの利⽤、カスタマイズ、⾃作の何れになるか、⽬処を⽴てましょう
テストランナーの役割
u テストランナーの名前に相応しいユースケースの選択
u 決定した順番にテストケースを実⾏する
u ≒ 「テストコードの実⾏を制御するコンポーネント」
u 以上から、テストランナーとは何か?を明らかにすることが出来た
u 同時にツールの⽐較結果から、テストランナーの役割に差異がないことも明ら
かになった
テストランナーの選択⽅法
u ポイント
u テストランナーをどのように実⾏したいかを決定すること
u 「どのようにしたいか」を、テストシステムに対する要求として明らかにすること
u つまり、どのように⾃動テストを実⾏したいか、決めればよい
具体例で⾒るテスト実⾏⽅法1
u JUnit4.13の場合
u org.junit.runner.Runner
u org.junit.runners.ParentRunner
u org.junit.runners.BlockJUnit4ClassRunner
u Chain Of Responsibility パターンを取り⼊れたcustomizable なランナー
u org.junit.internal.runners.JUnit38ClassRunner
u JUnit3系以前のテストケースの記法を踏襲する為のランナー
具体例で⾒るテスト実⾏⽅法2
u TestNGの場合
u クラス前、メソッド前、テスト、メソッド後、クラス後の順にテストを実⾏したい
u BeforeClass、BeforeMethod、Test、AfterMethod、AfterClass
具体例で⾒るテスト実⾏⽅法3
u Pitalium の場合
u テストをマルチスレッドで実⾏したい
u com.htmlhifive.pitalium.core.ParameterizedThreads
u 独⾃の処理を追加してテストを実⾏したい
u com.htmlhifive.pitalium.junit.PtlBlockJUnit4ClassRunnerWithParameters
u テストに共通する処理をテスト(TestClass)毎に実⾏したい
u org.junit.rules.TestWatcherを継承した
u テストケース(TestClassのメソッド)毎に以下の共通処理を⾏う
u com.htmlhifive.pitalium.core.rules.AssertionView
u テスト成功時:期待結果IDの更新
u テスト終了時:WebDriverのquit
u com.htmlhifive.pitalium.core.rules.ResultCollector
u テストクラス実⾏毎に、テスト結果の収集・出⼒を⾏う

20161203 selenium adventcalender