JBoss と Arquillian で実現する究極のテスト環境
レッドハット株式会社JBoss サービス事業部コンサルタント⼭山⽥田 義和
Who am I ?
Copyright © 2012 Red Hat, Inc. 2
Hi, I’m glad to see you !
Copyright © 2012 Red Hat, Inc. 3
インテグレーションテストのためのテスティングプラットフォーム
http://www.jboss.org/arquillian.html
Arquillian ???
クールなシステムのためのクールなテストを実現するためのツールです。
詳しくはこのセッションで解説します。
テスティングプラットフォーム?
Copyright © 2012 Red Hat, Inc. 4
Copyright © 2012 Red Hat, Inc. 5
JBoss Enterprise Application Platform のサブスクリプションで
Red Hat からのサポートを受けられます。※ 使い⽅方に困ったら Red Hat の親切切なサポートに聞きましょう!
サポートは?
Agenda
Copyright © 2012 Red Hat, Inc. 6
l クールなシステムとは何か?l クールなシステムをどのように作り込む
か?l 開発サイクルとテストの⾃自動化l コンポーネントマップとテストl インテグレーションテスト⾃自動化の課題l Arquillian のコンセプトと仕組み
クールなシステムの定義
Copyright © 2012 Red Hat, Inc. 7
使う側の要求に対して機敏に継続的に適切切なコストで正確に
対応
開発サイクル
Copyright © 2012 Red Hat, Inc. 8
テスト 設計
実装
新規開発、機能修正・追加、バグ
要求(要件)を設計・実装が正確に満たしているかの評価・検証
テストの⽬目的
テストを⾃自動化すると
Copyright © 2012 Red Hat, Inc. 9
テスト設計実装
l テスト⼿手順を継続的に正確に再実⾏行行可能になります。
l ⼿手動テストに⽐比べテストの実⾏行行に必要なコストが圧倒的に⼩小さくなります。
l 機敏に設計・実装の評価・検証を⾏行行うことが可能になります。
クールなシステムの定義に完全にマッチ
Copyright © 2012 Red Hat, Inc. 10
クールなシステムは⾃自動化されたクールなテスト
で作り込む!※ もちろん良良い設計・実装もと〜~っても⼤大事です。
クールなシステムを どのように作り込む?
Copyright © 2012 Red Hat, Inc. 11
クールなテストとは何か?それをどのように実現するか?
※ JBoss、Java EE 6 に関する設計・実装のお話も良良いシステムの構築に深く関係しますが別の機会に。。。ごめんなさい。
本セッションのテーマ
コンポーネントマップ
Copyright © 2012 Red Hat, Inc. 12
Red Hat Enterprise LinuxKernel
package #A package #BJava VM
JBoss Enterprise Application PlatformWeb Container Transaction DataSource messaging
Java EEJAX-‐‑‒RS JSF JPA JMSEJB
library #A library #B library #CApplication Archive
component #D
H/W, N/W
CDI
component #Bcomponent #A component #C
package #C
コンポーネントマップとテスト
Copyright © 2012 Red Hat, Inc. 13
Red Hat Enterprise LinuxKernel
package #A package #BJava VM
JBoss Enterprise Application PlatformWeb Container Transaction DataSource messaging
Java EEJAX-‐‑‒RS JSF JPA JMSEJB
library #A library #B library #CApplication Archive
component #D
H/W, N/W
CDI
component #Bcomponent #A component #C
package #C
単体テスト
単体テスト
単体テスト
単体テスト
単体テストインテグレー
ションテスト
インテグレーションテスト
インテグレーションテスト
単体テストインテグレーションテスト
システムテスト
システムテスト
※ 通常のシステムテストでは DB 等の他システムとの連携のテストも⾏行行います。
テストの性質とコスト
Copyright © 2012 Red Hat, Inc. 14
単体テスト
インテグレーションテスト
システムテスト※1 影響範囲は主にテストが対象とするコンポーネントの範囲やテストエラーが発⽣生した際の⼿手戻りの範囲を想定しています。
※2 コストは主にテストの実施やテスト結果のフィードバックに必要な⼈人的リソースや時間的なコストを想定しています。
影響範囲コスト
テスト⾃自動化の現状
Copyright © 2012 Red Hat, Inc. 15
Copyright © 2012 Red Hat, Inc. 16
今よりテストが⾃自動化できたら
Cooool !
テスト⾃自動化の問題点あるインテグレーションテストの場合
Copyright © 2012 Red Hat, Inc. 17
JBoss Enterprise Application PlatformWeb Container Transaction DataSource messaging
Java EEJAX-‐‑‒RS JSF JPA JMSEJB
library #A library #B library #CApplication Archive
component #D
CDI
component #Bcomponent #A component #C
テスト対象 テスト対象が依存するコンポーネント
テストの⾃自動化の問題点
Copyright © 2012 Red Hat, Inc. 18
JBoss Enterprise Application PlatformWeb Container Transaction DataSource messaging
Java EEJAX-‐‑‒RS JSF JPA JMSEJB
library #A library #B library #CApplication Archive
component #D
CDI
component #Bcomponent #A component #C
※ テストコードのコールスタック
コンポーネント間の依存
コンテナ依存
テスト⾃自動化の課題
Copyright © 2012 Red Hat, Inc. 19
ü 依存するコンポーネントをどうするか?ü 依存するコンテナのサービスをどうするか?
ü モック地獄!ü コンテナのサービスの制御には、かなりの⼯工夫が必要ü 軽量量テストコンテナ等を使⽤用する場合本番環境との違いに注意する必要あり。
何とか解決しようとすると
Copyright © 2012 Red Hat, Inc. 20
○*×%^@△!!+_^$
課題だらけ。。。
Arquillian のコンセプト
Copyright © 2012 Red Hat, Inc. 21
稼働するコンテナでテストを実⾏行行する。
以下の範囲をテストのプロセスに組込む
Copyright © 2012 Red Hat, Inc. 22
JBoss Enterprise Application PlatformWeb Container Transaction DataSource messaging
Java EEJAX-‐‑‒RS JSF JPA JMSEJB
library #A library #B library #CApplication Archive
component #D
CDI
component #Bcomponent #A component #C
テスト実⾏行行時に制御
テスト実⾏行行時に⽣生成テストプロセスにデプロイと
コンテナの制御を組込む
Arquillian がテスト実⾏行行時に⾏行行うこと
Copyright © 2012 Red Hat, Inc. 23
1. パッケージング(war, ear)2. コンテナの起動・停⽌止3. デプロイ・アンデプロイ4. コンテナ上でのコンポーネントのテスト
Arquillian の仕組みパッケージング
Copyright © 2012 Red Hat, Inc. 24
test.war, test.ear
xx.class yy.class
beans.xml persistence.xml
1.テストに必要なクラスや DD の収集
2. パッケージングテスト実行に必要なテスト制御コンポーネントもパッケージングします。
〜~.class 〜~.xml Control component
Arquillian の仕組みコンテナの起動とデプロイ
Copyright © 2012 Red Hat, Inc. 25
JBoss (Container)
3. コンテナの起動
test.war, test.ear〜~.class 〜~.xml Control componenttest.war, test.ear
4. デプロイ
Arquillian の仕組みテストの実⾏行行
Copyright © 2012 Red Hat, Inc. 26
JBoss (Container)
4. テストの実⾏行行
test.war, test.ear〜~.class 〜~.xml Control component
Arquillian の仕組みコンテナの停⽌止とアンデプロイ
Copyright © 2012 Red Hat, Inc. 27
JBoss (Container)
5. アンデプロイ&停⽌止
Arquillian が実現可能にするテスト
Copyright © 2012 Red Hat, Inc. 28
1. Java EE に依存するテストDI, JPA, EJB, … etc
2. コンテナのサービスに依存するテストmessaging, DataSource, … etc
Arquillian では実現できないテスト
Copyright © 2012 Red Hat, Inc. 29
1. コンテナより低レイヤのテストJVM, OS, … etc
2. ビューレイヤのテストJavaScript, CSS, … etc
3. パフォーマンス・障害テスト
だけ
Demo 1
Copyright © 2012 Red Hat, Inc. 30
Eclipse から Remote モードで Arquillian によるテス
トを実⾏行行する。
Demo 2
Copyright © 2012 Red Hat, Inc. 31
Jenkins から Managed モードで Arquillian による
テストを実⾏行行する。
さらなるテストの⾃自動化へ!
Copyright © 2012 Red Hat, Inc. 32
ご来場頂いた⽅方々にだけ
そっと紹介します。
まとめ
Copyright © 2012 Red Hat, Inc. 33
l クールなシステムとは使う側の要求に対して機敏に継続的に適切切なコストで正確に対応可能なシステムである。
l クールなシステムの開発には⾃自動化されたクールなテストが実施可能な環境が必要である。
l Arquillian によりこれまで実現の難しかった真のインテグレーションテストが可能になる。
まとめ + α
Copyright © 2012 Red Hat, Inc. 34
Arquillian によりクールなテストを実現できるようになりました。ただし、クールな(必要⼗十分で意味のある)テストを設計することは⾃自動化できません。クールなテストを設計してクールなエンジニアになりましょう!
What a cool we are!
Copyright © 2012 Red Hat, Inc. 35
To be continued
Copyright © 2012 Red Hat, Inc. 36
次回 JJBug で Arquillian の技術的な詳細を紹介します。
https://community.jboss.org/groups/japan-‐‑‒jbug?view=overview#/?tagSet=undefined
ご清聴ありがとうございました。
⼭山⽥田 義和:[email protected]
See you later !
Top Related