続 JBoss seamでtestNGのSeamTest
Updated Date: 2024/01/01 00:26
引き続きJBoss Seamのお話。
あれから休みを挟むこと約1週間。ようやくテスト対象のメソッドが動き出した。
Seamコンポーネントを使ったテストというのは、テストクラスに extends SeamTest というクラスの継承が必要となる。
これがあるおかげで、@Inや@OutなどのSeamによるアノテーションを、テストクラスと共有することが出来るようになる。
まあ、ここまではいいんだけど、これにも色々と制約があった。
とりあえず自分が調べたことを以下にがっつり記載しようと思う。
誰かの役に立つと信じて。。。
(環境は JBoss Seam 2.2.0 GA、JBossAS 5.1)
いらないファイルがtestディレクトリに存在していないか
(seam-genで生成されるantのbuild.xmlを参照)余計なライブラリがクラスパスに存在しないか
特に2つにプロジェクトを分けている場合、
jboss-seam.jarが2つあり、それがEJBのエラーに繋がっていた気がする
この場合、面倒だがテストケース独自にクラスパスを構成させてやるbootstrapに<プロジェクト名>-ds.xmlがあるか
bootstrapのdeployディレクトリに、上記ファイルが必要。
さらに、、 を使ってはいけない。 persistence.xmlの設定
persistence-unitには transaction-type="JTA" を指定し、
jta-data-sourceは java:/<データソース名> とする。jboss-embeded-api.jarがあるか
これをクラスパスに入れておかないと、Face云々.run()の実行時に
[provider_url not probided in jindi.properties]というエラーが発生する。テスト対象クラスでの変数の宣言
変数名がSeamコンポーネントの@nameと同一でないと、SeamTestのsetValue()では、
インジェクション・アウトジェクションしてくれない。
(Seamコンポーネントとして認識してくれない?)
特に private 指定があると尚更だめである。
この場合、setFieldを使ってリフレクションを利用した値の導入が必要となる。
これについては、洋書ながら以下の書籍が参考になる。
http://www.amazon.co.jp/Seam-Framework-Experience-Evolution-Series/dp/0137129394
いかがだろうか。
SeamTestを用いたTestNGによるテスト自動化は、日本語文献もWeb検索でいくつか出てくるけど、
その多くはSeam1の時代だったりちょっと古い情報だったりする(まあ、Seam2.2やJBossAS5も十分いまや古いけど) 。
また、実際のテストケースの書き方などに至っては、RedHatの公開するドキュメントかサンプルソースくらいしか参考にできない。
そんな中でも、先駆者的にTestNGによるテスト自動化を行ってきた先人達は偉大である。
なお、挙げたもの以外にも例えばソース内でJSFから直接値を持ってきている箇所がある場合
(FacesContext.getCurrentInstance().云々…)、またさらにややこしくなるのだが、
これは出来上がったらgistなりGithubなりにアップロードしようかなと思っている。
とはいえSeam 2.2.0GAの場合、
さて、次はいよいよJenkinsとの連携だ。
野望実現の道のりは遠い。