読者です 読者をやめる 読者になる 読者になる

FactoryとDataProvicerの違い

TestNG

出来事

・チーズケーキフラペチーノを飲んだ。個人的にはうーんって感じ。

・リフレッシャーズ クールライムを飲んだ。うまい。

・いつもの湯葉の店で昼食を食べた。うまい。

・テストフレームワークを改善した。

 複数のテストケースを別々のインスタンスで並列実行できるようにした。

 

反省

・コーディングに集中し過ぎて家庭での会話がそぞろ。気を付けないと(^_^;)

 

特記事項

・テストフレームワーク改善まとめ

 どんなテストを実行するかによってアーキテクチャ要素(TestNG/JUnit)は変わる。

 

・DataProviderとFactoryの違い

 DataProviderは、スクリプト駆動テストでは、同じテストスクリプトに様々なデータを投入してテストを実行する時に使う。キーワード駆動テストでは様々なテストデータのスクリプトデータを投入してテストを実行する。

 単機能テストで威力を発揮すしそう。

 

 Factoryは、Factoryオブジェクトがテストクラスをインスタンス化して、テストメソッドが実行される。同じテストクラスを別のインスタンスとして実行すると きに使う。

 これでもDataProviderと同じことは実現できる。ただし同一テストクラスのインスタンスを使いまわすかどうかに違いがある。testng.xmlsのsuiteタグで、parallel="method"としてFactoryで実行すると一気にテストを実行できる。

 ・Factory実装のメリット

  複数のテストを同時実行させる場合には大変便利な機能である。

  例1)マルチブラウザテストのとき

    同じテストデータで異なるブラウザテストを実施するケースがあるから、この時はFactoryで各々のブラウザでテストを実行するデータを投入してparallelにメソッドを実行すれば効率的である。

 

  例2)単機能テストのとき

    データプロバイダで同じ種類のブラウザを別インスタンスで起動すれば、失敗したテストが成功したテストの足を引っ張らなくて(影響しなくて)良さそうである。

 

  合わせ技として、DataProviderが返したオブジェクトをFactoryアノテーションが受け取り、@Factoryがついたコンストラクタがそれを引数としてとりながらFactoryクラスによってインスタンス化されテストメソッドを実行させるというやり方もある。

  参考 TestNG – @Factory Annotation Tutorial – HowToDoInJava

     http://testng.org/doc/documentation-main.html#factories

 

 ・Factory実装のデメリット

  DataProviderからテストメソッドにデータを渡すと、どんなデータが渡されたかが分かる。 DataProviderからテストクラスのコンストラクタにFactoryアノテーション経由で渡すと、どのケースによって対象のテストが実行されたかが分からない。

  キーワードテストではテスト実行メソッドは一つだからどのケースが失敗しているのかが補足できないとテストの再現が出来ない。

  Listeners/Reportsを利用して改善が必要

 

以上