狠狠撸

狠狠撸Share a Scribd company logo
コンテナでテストをまわせ!
          Java EE への自动テストの導入

    小西 高之
    JBoss Technical Support Engineer
1   Red Hat K.K.
コンテナでテストをまわせ!
    Twitter ハッシュタグ: #jt12_b202

    小西 高之
    @leather_sole
2
とあるプロジェクトで ...

『これからアプリケーションのテストを始める』
『はい!』
『まずはこのテストだ!』



3
!?
4
『そんなの意味がないですよ!』




5
『そうさ、意味なんかない』




6
『俺たちは、




7
『俺たちは、こんなテストを ...




8
強いられているんだ!』
9
とお考えの皆さんのためのセッションです




10
今日话すこと
     ●
         自动テストの考え方
     ●
         テストフレームワークのご紹介
     ●
         デモ
     ●
         実際のプロジェクトへの適用
     ●
         まとめ




11
Java EE 6 Architecture
     Applet?Container
     Applet?Container         Web?Container
                              Web?Container     EJB?Container
                                                EJB?Container
         Client
         Client
                               JSP
                               JSP   Servlet
                                     Servlet         EJB
                                                     EJB


                              JSF, CDI, JPA,
                              JSF, CDI, JPA,    CDI, JPA, JMS,
                                                CDI, JPA, JMS,
                              JMS, JAX-RS,
                              JMS, JAX-RS,      JAX-RS, JACC,
                                                JAX-RS, JACC,
                              JACC, JTA, ...
                              JACC, JTA, ...    JTA, ...
                                                JTA, ...
        Application?
        Application?
     Client?Container
     Client?Container
         Client
         Client

      CDI, JPA, JMS,
      CDI, JPA, JMS,
      ...
      ...                                         Database
                                                  Database
12
自动テスト
     ●
         メリット
         ●
             リグレッションテスト
         ●
             再現可能
         ●
             実行時に人手が不要
     ●
         デメリット
         ●
             テスト作成
         ●
             メンテナンス




13
各テスト自动化の              容易 / 簡単
難易度と効果                テストの作成?メンテナンス?
                      実行前処理?実行?結果確認?
                      事後処理の難易度



     小   効果                            大
     テストの明確さ、テスト対象の
     変更可能性などによる自動化の
     効果




14
                      困難 / 複雑
容易 / 簡単
                        優先的に
                        テストを作成



     小   効果                大

     自動化以外の
     方法を考える
15
              困難 / 複雑
テストの分类
     ● Unit Test
     ● Integration Test


     ● System Test




16
Unit Test
     ●
         個々のクラスのテスト
     ●
         JVM 内で閉じている
     ●
         実行速度が速い
     ●
         Java EE 5 以降、容易にテストできるようになった
     ●
         コンテナの機能を補うためのオブジェクトが必要



17
Integration Test
     ●
         コンポーネントのテスト
         ●
             例)秘密鍵ファイルを使って XML に署名する
     ●
         コンテナ、ネットワーク、 DB 、ファイルなどを使用




18
System Test
     ●
         フィーチャーのテスト
         ●
             例)ユーザーとしてシステムにユーザー情報を登録する
     ●
         コンテナ、ネットワーク、 DB 、ファイルなどを使用




19
容易 / 簡単
Unit Test



     小   効果             大




20
              困難 / 複雑
容易 / 簡単
Integration Test



     小   効果                  大




21
                   困難 / 複雑
容易 / 簡単
System Test



     小   効果             大




22
              困難 / 複雑
Integration Test の問題点

     ●
         テスト作成が大変
     ●
         実行に時間がかかる
     ●
         テストコードが脆い

         効果は期待できるが、テスト作成、維持にコスト
         がかかる
23
容易 / 簡単
Integration Test



     小   効果                  大




24
                   困難 / 複雑
容易 / 簡単
After



     小   効果             大




25
              困難 / 複雑
26
Integration Test を自動化する力が欲しいか ... ?




27
Integration Test を自動化する力が欲しいか ... ?




28
29
Integration Test
     Framework のご紹介


         http://arquillian.org/
30
https://github.com/arquillian




31
Arquillian の特徴
     ●
         複数のコンテナに対応                   Web?Container     EJB?Container
                                      Web?Container     EJB?Container
         ●
             Java EE Containers
                                       JSP
                                       JSP   Servlet
                                             Servlet         EJB
                                                             EJB
         ●
             Web Containers
                                      JSF, CDI, JPA,
                                      JSF, CDI, JPA,    CDI, JPA, JMS,
                                                        CDI, JPA, JMS,
         ●
             EJB Containers           JMS, JAX-RS,
                                      JMS, JAX-RS,      JAX-RS, JACC,
                                                        JAX-RS, JACC,
         ●
             CDI Containers           JACC, JTA, ...
                                      JACC, JTA, ...    JTA, ...
                                                        JTA, ...



             https://docs.jboss.org/author/display/ARQ/Supported+containers
32
Arquillian の特徴
     ●
         JUnit/TestNG のテストケースとしてテストを作成
     ●
         ビルドツール非依存
     ●
         IDE の自動ビルド機能と連携
     ●
         拡張可能
         ●
             ( 開発中 ) Selenium, DBUnit, Andloid ...



33
Arquillian 利用プロジェクトの例
     ●
         Seam 3
         ●
             http://seamframework.org/Seam3
     ●
         Apache DeltaSpike
         ●
             https://cwiki.apache.org/DeltaSpike/
     ●
         JBoss AS 7
         ●
             http://www.jboss.org/as7
     ●
         JBoss RHQ
         ●
             http://www.jboss.org/rhq
34
例
     CDI Bean のテスト



35
Greeter.java


       /**
        * A component for creating personal greetings.
        */
       public class Greeter {
           public void greet(PrintStream to, String name) {
               to.println(createGreeting(name));
           }
           public String createGreeting(String name) {
               return "Hello, " + name + "!";
           }
       }



36
GreeterTest.java
      @RunWith(Arquillian.class)
      public class GreeterTest {
          @Deployment
          public static JavaArchive createDeployment() {
              return ShrinkWrap.create(JavaArchive.class)
                  .addClass(Greeter.class)
                  .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
          }
          @Inject
          Greeter greeter;
          @Test
          public void should_create_greeting() {
              Assert.assertEquals("Hello, Earthling!",
                  greeter.createGreeting("Earthling"));
              greeter.greet(System.out, "Earthling");
          }
      }
37
GreeterTest.java
                                              Arquillian を指定
      @RunWith(Arquillian.class)
      public class GreeterTest {
          @Deployment
          public static JavaArchive createDeployment() {
              return ShrinkWrap.create(JavaArchive.class)
                  .addClass(Greeter.class)
                  .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
          }
          @Inject
          Greeter greeter;
          @Test
          public void should_create_greeting() {
              Assert.assertEquals("Hello, Earthling!",
                  greeter.createGreeting("Earthling"));
              greeter.greet(System.out, "Earthling");
          }
      }
38
GreeterTest.java
      @RunWith(Arquillian.class)
      public class GreeterTest {
          @Deployment
          public static JavaArchive createDeployment() {
              return ShrinkWrap.create(JavaArchive.class)
                  .addClass(Greeter.class)
                  .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
          }
          @Inject
                             greeter をインジェクト
          Greeter greeter;
          @Test
          public void should_create_greeting() {
              Assert.assertEquals("Hello, Earthling!",
                  greeter.createGreeting("Earthling"));
              greeter.greet(System.out, "Earthling");
          }
      }
39
GreeterTest.java
      @RunWith(Arquillian.class)
      public class GreeterTest {
          @Deployment
                                   テストアーカイブを指定
          public static JavaArchive createDeployment() {
              return ShrinkWrap.create(JavaArchive.class)
                  .addClass(Greeter.class)
                  .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
          }
          @Inject
          Greeter greeter;
          @Test
          public void should_create_greeting() {
              Assert.assertEquals("Hello, Earthling!",
                  greeter.createGreeting("Earthling"));
              greeter.greet(System.out, "Earthling");
          }
      }
40
GreeterTest.java
      @RunWith(Arquillian.class)
      public class GreeterTest {
          @Deployment
          public static JavaArchive createDeployment() {
              return ShrinkWrap.create(JavaArchive.class)
                  .addClass(Greeter.class)
                  .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
          }
          @Inject
          Greeter greeter;
          @Test
          public void should_create_greeting() {
              Assert.assertEquals("Hello, Earthling!",
                  greeter.createGreeting("Earthling"));
              greeter.greet(System.out, "Earthling");
          }
      }
41
ファイル構成




42
●
     デモの実行環境
     ●
         Weld 1.1.1.Final
         ●
             embedded
     ●
         GlassFish 3.1
         ●
             embedded
     ●
         JBoss AS 7.1.0.Final
         ●
             managed


43
Container management
     ●
         Embedded
     ●
         Remote
     ●
         Managed




44
Managed mode




     JUnit
45
Managed mode



     JU   Arquillian class
          (extends
          BlockJUnit4ClassRunner)

46
Managed mode



     boot

     arquillian service
     JAR file

47
Managed mode




     run tests




48
Managed mode


     correct result

       undeploy

       shutdown

49
Managed mode



     JU
          result




50
DEMO



51
ふりかえり
     ●
         テスト実行速度について
         ●
             IDE の自動ビルドを利用
         ●
             最新コンテナ:起動が高速




52
実プロジェクトへの适用
     ●
         既存のコードへの適用
     ●
         DB 、ネットワーク
     ●
         画面遷移




53
実プロジェクトへの适用

     ●
         既存のコードへの適用
     ●
         DB 、ネットワーク
     ●
         画面遷移

     ●
         arquillian-showcase を参照してください
         ●
             CDI, EJB, EJB(TestNG), JAX-RS, JAX-WS, JMS, JPA, JPA-Lite, JSF,
             OSGi, Servlet, UI(Selenium)
         ●
             https://github.com/arquillian/arquillian-showcase
54
実プロジェクトへの适用
     ●
         既存のコードへの適用
     ●
         DB 、ネットワーク
     ●
         画面遷移




55
『新規プロジェクトの例なんて、意味がない』




56
『俺たちは、既存コードのメンテナンスを ...




57
強いられているんだ!』
58
とお考えの皆さんのためのデモです




59
既存コードへの            容易 / 簡単
自动テストの適用                     優先的に
                             テストを作成



     小   効果                     大
          徐々に
          テストを追加



60
                   困難 / 複雑
DEMO
     ●
         既存コードの例: OpenAM
     ●
         WAR ファイルを読み込んで、テストアーカイブを作成
     ●
         テストを実行
         ●
             コンテナ: JBoss Enterprise Application Platform 5.1.2

     ●
         OpenAM
         http://forgerock.com/openam.html
61
DEMO




62
     JU
まとめ




63
これまでの Integration Test

     ●
         テスト作成が大変
     ●
         実行に時間がかかる
     ●
         テストコードが脆い

         効果は期待できるが、テスト作成、維持にコスト
         がかかる

64
Arquillian を利用した Integration Test

     ●
         作成、管理、実行が容易
     ●
         実行が高速
     ●
         テストコードが脆くない




65
容易 / 簡単
Integration Test



     小   効果                  大




66
                   困難 / 複雑
コンテナでテストをまわせ!
         Java EE への自动テストの導入



     ご清聴ありがとうございました


67
References
     ●
         Arquillian - JBoss Community                               ●
                                                                        レガシーコード改善ガイド
         http://www.jboss.org/arquillian                                (Michael C. Feathers 著 / ウルシステムズ株式会社 監訳 / 平澤
                                                                        章、越智典子、稲葉信之、田村友彦、小堀真義 訳 / 翔泳社 刊 )
     ●
         Shrinkwrap - JBoss Community
         http://www.jboss.org/shrinkwrap/                           ●
                                                                        Growing Object-Oriented Software Guided by Tests
                                                                        (Steve Freeman 、 Nat Pryce 著 / Addison-Wesley 刊 )
     ●
         Real Java Enterprise Testing
         http://slidesha.re/q06oXs                                  ●
                                                                        Jenkins
                                                                        (John Ferguson Smart 著 / Sky 株式会社 玉川 竜司 訳 / オライ
     ●
         Throwing complexity over the wall: Rapid development for       リージャパン 刊 )
         enterprise Java
         http://slidesha.re/vl8Hkw                                  ●
                                                                        Jenkins 実践入門
                                                                        ( 佐藤聖規 ( 監修 ) 、和田貴久、河村 雅人、米沢 弘樹、山岸 啓
     ●
         JUnit                                                          著 / 川口 耕介 監修 / 技術評論社 刊 )
         http://junit.org/
                                                                    ●
                                                                        xUnit Test Patterns
     ●
         Git                                                            (Gerard Meszaros 著 / Addison-Wesley 刊 )
         http://git-scm.com/
     ●
         Jenkins CI
         http://jenkins-ci.org/http://slidesha.re/vl8Hkw
     ●
         CloudBees
         http://www.cloudbees.com/
     ●
         JBoss Tools
68       http://www.jboss.org/tools

More Related Content

What's hot (20)

Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点) Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点)
Norito Agetsuma
?
Head toward Java 15 and Java 16
Head toward Java 15 and Java 16Head toward Java 15 and Java 16
Head toward Java 15 and Java 16
Yuji Kubota
?
継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング
Takayuki Kondou
?
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
Yuji Kubota
?
TDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaTDD勉強会キックオフ for Java
TDD勉強会キックオフ for Java
Yuta Kawadai
?
テストゼロからイチに进むための戦略と戦术
テストゼロからイチに进むための戦略と戦术テストゼロからイチに进むための戦略と戦术
テストゼロからイチに进むための戦略と戦术
Y Watanabe
?
大規模な負荷て?もト?キト?キしない為のJava EE
大規模な負荷て?もト?キト?キしない為のJava EE大規模な負荷て?もト?キト?キしない為のJava EE
大規模な負荷て?もト?キト?キしない為のJava EE
Taiichilow Nagase
?
闯补惫补厂肠谤颈辫迟で奥别产顿谤颈惫别谤のテストコードを书きましょ
闯补惫补厂肠谤颈辫迟で奥别产顿谤颈惫别谤のテストコードを书きましょ闯补惫补厂肠谤颈辫迟で奥别产顿谤颈惫别谤のテストコードを书きましょ
闯补惫补厂肠谤颈辫迟で奥别产顿谤颈惫别谤のテストコードを书きましょ
Kohki Nakashima
?
闯补惫补チョットデキルへの道?闯补惫补コア厂顿碍に见る真似したいコード10选?
闯补惫补チョットデキルへの道?闯补惫补コア厂顿碍に见る真似したいコード10选?闯补惫补チョットデキルへの道?闯补惫补コア厂顿碍に见る真似したいコード10选?
闯补惫补チョットデキルへの道?闯补惫补コア厂顿碍に见る真似したいコード10选?
JustSystems Corporation
?
骋谤补颈濒蝉のススメ(仮)
骋谤补颈濒蝉のススメ(仮)骋谤补颈濒蝉のススメ(仮)
骋谤补颈濒蝉のススメ(仮)
Tsuyoshi Yamamoto
?
Jsf アプリ作ったった
Jsf アプリ作ったったJsf アプリ作ったった
Jsf アプリ作ったった
Oda Shinsuke
?
WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」
Hiroaki NAKADA
?
Advanced database monitoring in modern java
Advanced database monitoring in modern javaAdvanced database monitoring in modern java
Advanced database monitoring in modern java
Chihiro Ito
?
Visual Studio 2012 Native Debugger Feature
Visual Studio 2012 Native Debugger FeatureVisual Studio 2012 Native Debugger Feature
Visual Studio 2012 Native Debugger Feature
Kazushi Kamegawa
?
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4cCDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
Norito Agetsuma
?
Tomcatの実装から学ふ?クラスロータ?リーク #渋谷Java
Tomcatの実装から学ふ?クラスロータ?リーク #渋谷JavaTomcatの実装から学ふ?クラスロータ?リーク #渋谷Java
Tomcatの実装から学ふ?クラスロータ?リーク #渋谷Java
Norito Agetsuma
?
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
torutk
?
クラスローダーについて
クラスローダーについてクラスローダーについて
クラスローダーについて
Suguru ARAKAWA
?
ClassLoader Leak Patterns
ClassLoader Leak PatternsClassLoader Leak Patterns
ClassLoader Leak Patterns
nekop
?
Gradle a new Generation Build Tool
Gradle a new Generation Build ToolGradle a new Generation Build Tool
Gradle a new Generation Build Tool
Shinya Mochida
?
Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点) Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点)
Norito Agetsuma
?
Head toward Java 15 and Java 16
Head toward Java 15 and Java 16Head toward Java 15 and Java 16
Head toward Java 15 and Java 16
Yuji Kubota
?
継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング
Takayuki Kondou
?
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
Yuji Kubota
?
TDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaTDD勉強会キックオフ for Java
TDD勉強会キックオフ for Java
Yuta Kawadai
?
テストゼロからイチに进むための戦略と戦术
テストゼロからイチに进むための戦略と戦术テストゼロからイチに进むための戦略と戦术
テストゼロからイチに进むための戦略と戦术
Y Watanabe
?
大規模な負荷て?もト?キト?キしない為のJava EE
大規模な負荷て?もト?キト?キしない為のJava EE大規模な負荷て?もト?キト?キしない為のJava EE
大規模な負荷て?もト?キト?キしない為のJava EE
Taiichilow Nagase
?
闯补惫补厂肠谤颈辫迟で奥别产顿谤颈惫别谤のテストコードを书きましょ
闯补惫补厂肠谤颈辫迟で奥别产顿谤颈惫别谤のテストコードを书きましょ闯补惫补厂肠谤颈辫迟で奥别产顿谤颈惫别谤のテストコードを书きましょ
闯补惫补厂肠谤颈辫迟で奥别产顿谤颈惫别谤のテストコードを书きましょ
Kohki Nakashima
?
闯补惫补チョットデキルへの道?闯补惫补コア厂顿碍に见る真似したいコード10选?
闯补惫补チョットデキルへの道?闯补惫补コア厂顿碍に见る真似したいコード10选?闯补惫补チョットデキルへの道?闯补惫补コア厂顿碍に见る真似したいコード10选?
闯补惫补チョットデキルへの道?闯补惫补コア厂顿碍に见る真似したいコード10选?
JustSystems Corporation
?
骋谤补颈濒蝉のススメ(仮)
骋谤补颈濒蝉のススメ(仮)骋谤补颈濒蝉のススメ(仮)
骋谤补颈濒蝉のススメ(仮)
Tsuyoshi Yamamoto
?
Jsf アプリ作ったった
Jsf アプリ作ったったJsf アプリ作ったった
Jsf アプリ作ったった
Oda Shinsuke
?
WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」
Hiroaki NAKADA
?
Advanced database monitoring in modern java
Advanced database monitoring in modern javaAdvanced database monitoring in modern java
Advanced database monitoring in modern java
Chihiro Ito
?
Visual Studio 2012 Native Debugger Feature
Visual Studio 2012 Native Debugger FeatureVisual Studio 2012 Native Debugger Feature
Visual Studio 2012 Native Debugger Feature
Kazushi Kamegawa
?
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4cCDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
Norito Agetsuma
?
Tomcatの実装から学ふ?クラスロータ?リーク #渋谷Java
Tomcatの実装から学ふ?クラスロータ?リーク #渋谷JavaTomcatの実装から学ふ?クラスロータ?リーク #渋谷Java
Tomcatの実装から学ふ?クラスロータ?リーク #渋谷Java
Norito Agetsuma
?
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
torutk
?
クラスローダーについて
クラスローダーについてクラスローダーについて
クラスローダーについて
Suguru ARAKAWA
?
ClassLoader Leak Patterns
ClassLoader Leak PatternsClassLoader Leak Patterns
ClassLoader Leak Patterns
nekop
?
Gradle a new Generation Build Tool
Gradle a new Generation Build ToolGradle a new Generation Build Tool
Gradle a new Generation Build Tool
Shinya Mochida
?

Viewers also liked (20)

CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
Rafael Benevides
?
Java EE 再入門
Java EE 再入門Java EE 再入門
Java EE 再入門
minazou67
?
Electing A President Individual Quiz
Electing A President Individual QuizElecting A President Individual Quiz
Electing A President Individual Quiz
guest71290aa
?
Bloodbaths Website
Bloodbaths WebsiteBloodbaths Website
Bloodbaths Website
brandymcclure
?
Small Business Owners' Work-Life Balance
Small Business Owners' Work-Life BalanceSmall Business Owners' Work-Life Balance
Small Business Owners' Work-Life Balance
InterCall
?
Eal brandon
Eal   brandonEal   brandon
Eal brandon
Faye Brownlie
?
I need the data and I need it 1ms ago!
I need the data and I need it 1ms ago!I need the data and I need it 1ms ago!
I need the data and I need it 1ms ago!
Angelo Corsaro
?
ikd312-09-normalisasi
ikd312-09-normalisasiikd312-09-normalisasi
ikd312-09-normalisasi
Anung Ariwibowo
?
Art renaixement
Art renaixementArt renaixement
Art renaixement
Pablo Valenciano Sanz
?
Pipeline 4 Progress Action Plan Summary
Pipeline 4 Progress Action Plan SummaryPipeline 4 Progress Action Plan Summary
Pipeline 4 Progress Action Plan Summary
CreAgent Marketing
?
Absolute Dosimetry for Proton Beams-Doktorandenseminar 11 Sept 2008
Absolute Dosimetry for Proton Beams-Doktorandenseminar 11 Sept 2008Absolute Dosimetry for Proton Beams-Doktorandenseminar 11 Sept 2008
Absolute Dosimetry for Proton Beams-Doktorandenseminar 11 Sept 2008
Solange_Gagnebin
?
Carteles art nouveau reduxCarteles art nouveau redux
Carteles art nouveau redux
almudenaresad
?
API Design
API DesignAPI Design
API Design
Valentin Bora
?
Vision for Haverhill Comprehensive Plan Concept & Framework
Vision for Haverhill Comprehensive Plan Concept & FrameworkVision for Haverhill Comprehensive Plan Concept & Framework
Vision for Haverhill Comprehensive Plan Concept & Framework
John Michitson
?
Concurso emasagra 2013Concurso emasagra 2013
Concurso emasagra 2013
XXX XXX
?
Zend Certified Engineer & Zend Framework
Zend Certified Engineer & Zend FrameworkZend Certified Engineer & Zend Framework
Zend Certified Engineer & Zend Framework
Valentin Bora
?
Sarah Robins Powell resume/work sample
Sarah Robins Powell resume/work sampleSarah Robins Powell resume/work sample
Sarah Robins Powell resume/work sample
sayster
?
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
Rafael Benevides
?
Java EE 再入門
Java EE 再入門Java EE 再入門
Java EE 再入門
minazou67
?
Electing A President Individual Quiz
Electing A President Individual QuizElecting A President Individual Quiz
Electing A President Individual Quiz
guest71290aa
?
Small Business Owners' Work-Life Balance
Small Business Owners' Work-Life BalanceSmall Business Owners' Work-Life Balance
Small Business Owners' Work-Life Balance
InterCall
?
I need the data and I need it 1ms ago!
I need the data and I need it 1ms ago!I need the data and I need it 1ms ago!
I need the data and I need it 1ms ago!
Angelo Corsaro
?
Pipeline 4 Progress Action Plan Summary
Pipeline 4 Progress Action Plan SummaryPipeline 4 Progress Action Plan Summary
Pipeline 4 Progress Action Plan Summary
CreAgent Marketing
?
Absolute Dosimetry for Proton Beams-Doktorandenseminar 11 Sept 2008
Absolute Dosimetry for Proton Beams-Doktorandenseminar 11 Sept 2008Absolute Dosimetry for Proton Beams-Doktorandenseminar 11 Sept 2008
Absolute Dosimetry for Proton Beams-Doktorandenseminar 11 Sept 2008
Solange_Gagnebin
?
Carteles art nouveau reduxCarteles art nouveau redux
Carteles art nouveau redux
almudenaresad
?
Vision for Haverhill Comprehensive Plan Concept & Framework
Vision for Haverhill Comprehensive Plan Concept & FrameworkVision for Haverhill Comprehensive Plan Concept & Framework
Vision for Haverhill Comprehensive Plan Concept & Framework
John Michitson
?
Concurso emasagra 2013Concurso emasagra 2013
Concurso emasagra 2013
XXX XXX
?
Zend Certified Engineer & Zend Framework
Zend Certified Engineer & Zend FrameworkZend Certified Engineer & Zend Framework
Zend Certified Engineer & Zend Framework
Valentin Bora
?
Sarah Robins Powell resume/work sample
Sarah Robins Powell resume/work sampleSarah Robins Powell resume/work sample
Sarah Robins Powell resume/work sample
sayster
?

Similar to Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自动テストの導入 (20)

奥别产アプリの动的部分に着目したグレーボックス统合テストとテンプレート変数カバレッジの提案
奥别产アプリの动的部分に着目したグレーボックス统合テストとテンプレート変数カバレッジの提案奥别产アプリの动的部分に着目したグレーボックス统合テストとテンプレート変数カバレッジの提案
奥别产アプリの动的部分に着目したグレーボックス统合テストとテンプレート変数カバレッジの提案
Kazunori Sakamoto
?
SimpleModeler
SimpleModelerSimpleModeler
SimpleModeler
Tomoharu ASAMI
?
2012年箩补惫补メモリリーク
2012年箩补惫补メモリリーク2012年箩补惫补メモリリーク
2012年箩补惫补メモリリーク
torutk
?
础飞蝉で実现する蝉别濒别苍颈耻尘テスト高速术
础飞蝉で実现する蝉别濒别苍颈耻尘テスト高速术础飞蝉で実现する蝉别濒别苍颈耻尘テスト高速术
础飞蝉で実现する蝉别濒别苍颈耻尘テスト高速术
finoue
?
Jenkins javascript ci
Jenkins javascript ciJenkins javascript ci
Jenkins javascript ci
hisame64
?
20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL
Ryusuke Kajiyama
?
Functional Testing in #YAPCASIA
Functional Testing in #YAPCASIAFunctional Testing in #YAPCASIA
Functional Testing in #YAPCASIA
kyon mm
?
Beginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_studyBeginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_study
Toshiaki Maki
?
はじめての闯笔础
はじめての闯笔础はじめての闯笔础
はじめての闯笔础
kawaba
?
闯补惫补翱苍别2015报告またはこれからの闯补惫补
闯补惫补翱苍别2015报告またはこれからの闯补惫补闯补惫补翱苍别2015报告またはこれからの闯补惫补
闯补惫补翱苍别2015报告またはこれからの闯补惫补
なおき きしだ
?
闯痴惭の中身を可视化してみた
闯痴惭の中身を可视化してみた闯痴惭の中身を可视化してみた
闯痴惭の中身を可视化してみた
Kengo Toda
?
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
Akio Katayama
?
Beginning Java EE 6 勉強会(3) #bje_study
Beginning Java EE 6 勉強会(3) #bje_studyBeginning Java EE 6 勉強会(3) #bje_study
Beginning Java EE 6 勉強会(3) #bje_study
inatus
?
Rx java x retrofit
Rx java x retrofitRx java x retrofit
Rx java x retrofit
Shun Nakahara
?
Gradle handson
Gradle handsonGradle handson
Gradle handson
Nemoto Yusuke
?
骋谤补诲濒别どうでしょう
骋谤补诲濒别どうでしょう骋谤补诲濒别どうでしょう
骋谤补诲濒别どうでしょう
Takuma Watabiki
?
脱?独自改造! GebでWebDriverをもっとシンプルに
脱?独自改造! GebでWebDriverをもっとシンプルに脱?独自改造! GebでWebDriverをもっとシンプルに
脱?独自改造! GebでWebDriverをもっとシンプルに
Hiroko Tamagawa
?
これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?
Takahiro YAMADA
?
継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージ継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージ
Yasutomo Arai
?
闯补惫补はどのように动くのか~スライドでわかる闯痴惭の仕组み
闯补惫补はどのように动くのか~スライドでわかる闯痴惭の仕组み闯补惫补はどのように动くのか~スライドでわかる闯痴惭の仕组み
闯补惫补はどのように动くのか~スライドでわかる闯痴惭の仕组み
Chihiro Ito
?
奥别产アプリの动的部分に着目したグレーボックス统合テストとテンプレート変数カバレッジの提案
奥别产アプリの动的部分に着目したグレーボックス统合テストとテンプレート変数カバレッジの提案奥别产アプリの动的部分に着目したグレーボックス统合テストとテンプレート変数カバレッジの提案
奥别产アプリの动的部分に着目したグレーボックス统合テストとテンプレート変数カバレッジの提案
Kazunori Sakamoto
?
2012年箩补惫补メモリリーク
2012年箩补惫补メモリリーク2012年箩补惫补メモリリーク
2012年箩补惫补メモリリーク
torutk
?
础飞蝉で実现する蝉别濒别苍颈耻尘テスト高速术
础飞蝉で実现する蝉别濒别苍颈耻尘テスト高速术础飞蝉で実现する蝉别濒别苍颈耻尘テスト高速术
础飞蝉で実现する蝉别濒别苍颈耻尘テスト高速术
finoue
?
Jenkins javascript ci
Jenkins javascript ciJenkins javascript ci
Jenkins javascript ci
hisame64
?
20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL
Ryusuke Kajiyama
?
Functional Testing in #YAPCASIA
Functional Testing in #YAPCASIAFunctional Testing in #YAPCASIA
Functional Testing in #YAPCASIA
kyon mm
?
Beginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_studyBeginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_study
Toshiaki Maki
?
はじめての闯笔础
はじめての闯笔础はじめての闯笔础
はじめての闯笔础
kawaba
?
闯补惫补翱苍别2015报告またはこれからの闯补惫补
闯补惫补翱苍别2015报告またはこれからの闯补惫补闯补惫补翱苍别2015报告またはこれからの闯补惫补
闯补惫补翱苍别2015报告またはこれからの闯补惫补
なおき きしだ
?
闯痴惭の中身を可视化してみた
闯痴惭の中身を可视化してみた闯痴惭の中身を可视化してみた
闯痴惭の中身を可视化してみた
Kengo Toda
?
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
Akio Katayama
?
Beginning Java EE 6 勉強会(3) #bje_study
Beginning Java EE 6 勉強会(3) #bje_studyBeginning Java EE 6 勉強会(3) #bje_study
Beginning Java EE 6 勉強会(3) #bje_study
inatus
?
骋谤补诲濒别どうでしょう
骋谤补诲濒别どうでしょう骋谤补诲濒别どうでしょう
骋谤补诲濒别どうでしょう
Takuma Watabiki
?
脱?独自改造! GebでWebDriverをもっとシンプルに
脱?独自改造! GebでWebDriverをもっとシンプルに脱?独自改造! GebでWebDriverをもっとシンプルに
脱?独自改造! GebでWebDriverをもっとシンプルに
Hiroko Tamagawa
?
これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?
Takahiro YAMADA
?
継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージ継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージ
Yasutomo Arai
?
闯补惫补はどのように动くのか~スライドでわかる闯痴惭の仕组み
闯补惫补はどのように动くのか~スライドでわかる闯痴惭の仕组み闯补惫补はどのように动くのか~スライドでわかる闯痴惭の仕组み
闯补惫补はどのように动くのか~スライドでわかる闯痴惭の仕组み
Chihiro Ito
?

Recently uploaded (11)

闯补厂厂罢2025-顿5-1开発者手动の自动テスト导入によるバグ早期発见.辫诲蹿
闯补厂厂罢2025-顿5-1开発者手动の自动テスト导入によるバグ早期発见.辫诲蹿闯补厂厂罢2025-顿5-1开発者手动の自动テスト导入によるバグ早期発见.辫诲蹿
闯补厂厂罢2025-顿5-1开発者手动の自动テスト导入によるバグ早期発见.辫诲蹿
MaiKaneko4
?
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
翔栄 杉田
?
20250327_IoTLT_vol121_______________.pdf
20250327_IoTLT_vol121_______________.pdf20250327_IoTLT_vol121_______________.pdf
20250327_IoTLT_vol121_______________.pdf
Ayachika Kitazaki
?
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
sugiuralab
?
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
info819904
?
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
?
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージカスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
info819904
?
学会発表资料(2025/3/3):尝尝惭を利用した厂狈厂の投稿内容のインタラクティブマップ表示
学会発表资料(2025/3/3):尝尝惭を利用した厂狈厂の投稿内容のインタラクティブマップ表示学会発表资料(2025/3/3):尝尝惭を利用した厂狈厂の投稿内容のインタラクティブマップ表示
学会発表资料(2025/3/3):尝尝惭を利用した厂狈厂の投稿内容のインタラクティブマップ表示
Toyo University
?
鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介
鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介
鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介
鲍-22プログラミング?コンテスト运営事务局
?
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
Sojitz Tech-Innovation USA
?
生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料
生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料
生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料
suzukiyu1
?
闯补厂厂罢2025-顿5-1开発者手动の自动テスト导入によるバグ早期発见.辫诲蹿
闯补厂厂罢2025-顿5-1开発者手动の自动テスト导入によるバグ早期発见.辫诲蹿闯补厂厂罢2025-顿5-1开発者手动の自动テスト导入によるバグ早期発见.辫诲蹿
闯补厂厂罢2025-顿5-1开発者手动の自动テスト导入によるバグ早期発见.辫诲蹿
MaiKaneko4
?
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
翔栄 杉田
?
20250327_IoTLT_vol121_______________.pdf
20250327_IoTLT_vol121_______________.pdf20250327_IoTLT_vol121_______________.pdf
20250327_IoTLT_vol121_______________.pdf
Ayachika Kitazaki
?
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
sugiuralab
?
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
info819904
?
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
?
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージカスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
info819904
?
学会発表资料(2025/3/3):尝尝惭を利用した厂狈厂の投稿内容のインタラクティブマップ表示
学会発表资料(2025/3/3):尝尝惭を利用した厂狈厂の投稿内容のインタラクティブマップ表示学会発表资料(2025/3/3):尝尝惭を利用した厂狈厂の投稿内容のインタラクティブマップ表示
学会発表资料(2025/3/3):尝尝惭を利用した厂狈厂の投稿内容のインタラクティブマップ表示
Toyo University
?
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
Sojitz Tech-Innovation USA
?
生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料
生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料
生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料
suzukiyu1
?

Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自动テストの導入

  • 1. コンテナでテストをまわせ! Java EE への自动テストの導入 小西 高之 JBoss Technical Support Engineer 1 Red Hat K.K.
  • 2. コンテナでテストをまわせ! Twitter ハッシュタグ: #jt12_b202 小西 高之 @leather_sole 2
  • 11. 今日话すこと ● 自动テストの考え方 ● テストフレームワークのご紹介 ● デモ ● 実際のプロジェクトへの適用 ● まとめ 11
  • 12. Java EE 6 Architecture Applet?Container Applet?Container Web?Container Web?Container EJB?Container EJB?Container Client Client JSP JSP Servlet Servlet EJB EJB JSF, CDI, JPA, JSF, CDI, JPA, CDI, JPA, JMS, CDI, JPA, JMS, JMS, JAX-RS, JMS, JAX-RS, JAX-RS, JACC, JAX-RS, JACC, JACC, JTA, ... JACC, JTA, ... JTA, ... JTA, ... Application? Application? Client?Container Client?Container Client Client CDI, JPA, JMS, CDI, JPA, JMS, ... ... Database Database 12
  • 13. 自动テスト ● メリット ● リグレッションテスト ● 再現可能 ● 実行時に人手が不要 ● デメリット ● テスト作成 ● メンテナンス 13
  • 14. 各テスト自动化の 容易 / 簡単 難易度と効果 テストの作成?メンテナンス? 実行前処理?実行?結果確認? 事後処理の難易度 小 効果 大 テストの明確さ、テスト対象の 変更可能性などによる自動化の 効果 14 困難 / 複雑
  • 15. 容易 / 簡単 優先的に テストを作成 小 効果 大 自動化以外の 方法を考える 15 困難 / 複雑
  • 16. テストの分类 ● Unit Test ● Integration Test ● System Test 16
  • 17. Unit Test ● 個々のクラスのテスト ● JVM 内で閉じている ● 実行速度が速い ● Java EE 5 以降、容易にテストできるようになった ● コンテナの機能を補うためのオブジェクトが必要 17
  • 18. Integration Test ● コンポーネントのテスト ● 例)秘密鍵ファイルを使って XML に署名する ● コンテナ、ネットワーク、 DB 、ファイルなどを使用 18
  • 19. System Test ● フィーチャーのテスト ● 例)ユーザーとしてシステムにユーザー情報を登録する ● コンテナ、ネットワーク、 DB 、ファイルなどを使用 19
  • 20. 容易 / 簡単 Unit Test 小 効果 大 20 困難 / 複雑
  • 21. 容易 / 簡単 Integration Test 小 効果 大 21 困難 / 複雑
  • 22. 容易 / 簡単 System Test 小 効果 大 22 困難 / 複雑
  • 23. Integration Test の問題点 ● テスト作成が大変 ● 実行に時間がかかる ● テストコードが脆い 効果は期待できるが、テスト作成、維持にコスト がかかる 23
  • 24. 容易 / 簡単 Integration Test 小 効果 大 24 困難 / 複雑
  • 25. 容易 / 簡単 After 小 効果 大 25 困難 / 複雑
  • 26. 26
  • 29. 29
  • 30. Integration Test Framework のご紹介 http://arquillian.org/ 30
  • 32. Arquillian の特徴 ● 複数のコンテナに対応 Web?Container EJB?Container Web?Container EJB?Container ● Java EE Containers JSP JSP Servlet Servlet EJB EJB ● Web Containers JSF, CDI, JPA, JSF, CDI, JPA, CDI, JPA, JMS, CDI, JPA, JMS, ● EJB Containers JMS, JAX-RS, JMS, JAX-RS, JAX-RS, JACC, JAX-RS, JACC, ● CDI Containers JACC, JTA, ... JACC, JTA, ... JTA, ... JTA, ... https://docs.jboss.org/author/display/ARQ/Supported+containers 32
  • 33. Arquillian の特徴 ● JUnit/TestNG のテストケースとしてテストを作成 ● ビルドツール非依存 ● IDE の自動ビルド機能と連携 ● 拡張可能 ● ( 開発中 ) Selenium, DBUnit, Andloid ... 33
  • 34. Arquillian 利用プロジェクトの例 ● Seam 3 ● http://seamframework.org/Seam3 ● Apache DeltaSpike ● https://cwiki.apache.org/DeltaSpike/ ● JBoss AS 7 ● http://www.jboss.org/as7 ● JBoss RHQ ● http://www.jboss.org/rhq 34
  • 35. CDI Bean のテスト 35
  • 36. Greeter.java /** * A component for creating personal greetings. */ public class Greeter { public void greet(PrintStream to, String name) { to.println(createGreeting(name)); } public String createGreeting(String name) { return "Hello, " + name + "!"; } } 36
  • 37. GreeterTest.java @RunWith(Arquillian.class) public class GreeterTest { @Deployment public static JavaArchive createDeployment() { return ShrinkWrap.create(JavaArchive.class) .addClass(Greeter.class) .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); } @Inject Greeter greeter; @Test public void should_create_greeting() { Assert.assertEquals("Hello, Earthling!", greeter.createGreeting("Earthling")); greeter.greet(System.out, "Earthling"); } } 37
  • 38. GreeterTest.java Arquillian を指定 @RunWith(Arquillian.class) public class GreeterTest { @Deployment public static JavaArchive createDeployment() { return ShrinkWrap.create(JavaArchive.class) .addClass(Greeter.class) .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); } @Inject Greeter greeter; @Test public void should_create_greeting() { Assert.assertEquals("Hello, Earthling!", greeter.createGreeting("Earthling")); greeter.greet(System.out, "Earthling"); } } 38
  • 39. GreeterTest.java @RunWith(Arquillian.class) public class GreeterTest { @Deployment public static JavaArchive createDeployment() { return ShrinkWrap.create(JavaArchive.class) .addClass(Greeter.class) .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); } @Inject greeter をインジェクト Greeter greeter; @Test public void should_create_greeting() { Assert.assertEquals("Hello, Earthling!", greeter.createGreeting("Earthling")); greeter.greet(System.out, "Earthling"); } } 39
  • 40. GreeterTest.java @RunWith(Arquillian.class) public class GreeterTest { @Deployment テストアーカイブを指定 public static JavaArchive createDeployment() { return ShrinkWrap.create(JavaArchive.class) .addClass(Greeter.class) .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); } @Inject Greeter greeter; @Test public void should_create_greeting() { Assert.assertEquals("Hello, Earthling!", greeter.createGreeting("Earthling")); greeter.greet(System.out, "Earthling"); } } 40
  • 41. GreeterTest.java @RunWith(Arquillian.class) public class GreeterTest { @Deployment public static JavaArchive createDeployment() { return ShrinkWrap.create(JavaArchive.class) .addClass(Greeter.class) .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); } @Inject Greeter greeter; @Test public void should_create_greeting() { Assert.assertEquals("Hello, Earthling!", greeter.createGreeting("Earthling")); greeter.greet(System.out, "Earthling"); } } 41
  • 43. デモの実行環境 ● Weld 1.1.1.Final ● embedded ● GlassFish 3.1 ● embedded ● JBoss AS 7.1.0.Final ● managed 43
  • 44. Container management ● Embedded ● Remote ● Managed 44
  • 45. Managed mode JUnit 45
  • 46. Managed mode JU Arquillian class (extends BlockJUnit4ClassRunner) 46
  • 47. Managed mode boot arquillian service JAR file 47
  • 48. Managed mode run tests 48
  • 49. Managed mode correct result undeploy shutdown 49
  • 50. Managed mode JU result 50
  • 52. ふりかえり ● テスト実行速度について ● IDE の自動ビルドを利用 ● 最新コンテナ:起動が高速 52
  • 53. 実プロジェクトへの适用 ● 既存のコードへの適用 ● DB 、ネットワーク ● 画面遷移 53
  • 54. 実プロジェクトへの适用 ● 既存のコードへの適用 ● DB 、ネットワーク ● 画面遷移 ● arquillian-showcase を参照してください ● CDI, EJB, EJB(TestNG), JAX-RS, JAX-WS, JMS, JPA, JPA-Lite, JSF, OSGi, Servlet, UI(Selenium) ● https://github.com/arquillian/arquillian-showcase 54
  • 55. 実プロジェクトへの适用 ● 既存のコードへの適用 ● DB 、ネットワーク ● 画面遷移 55
  • 60. 既存コードへの 容易 / 簡単 自动テストの適用 優先的に テストを作成 小 効果 大 徐々に テストを追加 60 困難 / 複雑
  • 61. DEMO ● 既存コードの例: OpenAM ● WAR ファイルを読み込んで、テストアーカイブを作成 ● テストを実行 ● コンテナ: JBoss Enterprise Application Platform 5.1.2 ● OpenAM http://forgerock.com/openam.html 61
  • 62. DEMO 62 JU
  • 64. これまでの Integration Test ● テスト作成が大変 ● 実行に時間がかかる ● テストコードが脆い 効果は期待できるが、テスト作成、維持にコスト がかかる 64
  • 65. Arquillian を利用した Integration Test ● 作成、管理、実行が容易 ● 実行が高速 ● テストコードが脆くない 65
  • 66. 容易 / 簡単 Integration Test 小 効果 大 66 困難 / 複雑
  • 67. コンテナでテストをまわせ! Java EE への自动テストの導入 ご清聴ありがとうございました 67
  • 68. References ● Arquillian - JBoss Community ● レガシーコード改善ガイド http://www.jboss.org/arquillian (Michael C. Feathers 著 / ウルシステムズ株式会社 監訳 / 平澤 章、越智典子、稲葉信之、田村友彦、小堀真義 訳 / 翔泳社 刊 ) ● Shrinkwrap - JBoss Community http://www.jboss.org/shrinkwrap/ ● Growing Object-Oriented Software Guided by Tests (Steve Freeman 、 Nat Pryce 著 / Addison-Wesley 刊 ) ● Real Java Enterprise Testing http://slidesha.re/q06oXs ● Jenkins (John Ferguson Smart 著 / Sky 株式会社 玉川 竜司 訳 / オライ ● Throwing complexity over the wall: Rapid development for リージャパン 刊 ) enterprise Java http://slidesha.re/vl8Hkw ● Jenkins 実践入門 ( 佐藤聖規 ( 監修 ) 、和田貴久、河村 雅人、米沢 弘樹、山岸 啓 ● JUnit 著 / 川口 耕介 監修 / 技術評論社 刊 ) http://junit.org/ ● xUnit Test Patterns ● Git (Gerard Meszaros 著 / Addison-Wesley 刊 ) http://git-scm.com/ ● Jenkins CI http://jenkins-ci.org/http://slidesha.re/vl8Hkw ● CloudBees http://www.cloudbees.com/ ● JBoss Tools 68 http://www.jboss.org/tools