SlideShare uma empresa Scribd logo
1 de 20
Java のコードを 1/4 にする
グルービーなテスト
を導入しよう!
2012/09/01 G* ワークショップ in 福岡

綿引 琢磨
自己紹介
綿引琢磨(わたびきたくま)

株式会社デライトテクノロジーズ 代表取締役

JGGUG運営委員/ぐるーびーたん原作

ダークサイドの人

twitter : @bikisuke
今どきのテスト事情

xUnit、TDD(BC) の普及

書籍、情報の充実

エンジニアの意識の変化

それでも... テストツールの利用率は3割弱
 http://itpro.nikkeibp.co.jp/article/COLUMN/20110512/360286/?ST=develop
そのテストは何のため?

目的が曖昧なテスト

パターン網羅できていない

リファクタリングの足かせになっているテスト

共通化のしすぎ or 冗長なコード

Mock が大変
幸せになるためには・・・
テストの基礎を学ぶ

テスト戦略、テスト計画、テスト技法

テストコードのリファクタリング

不要なテストコードを捨てる

簡潔にテストを書けるツールを採用する
そこで
 グルービー
    ですよ
グルービーなテストをしよう!
グルービーなテスト

Groovy を利用する

 Power Assert
Spock Framework を利用する

 Mock, Data Driven Testing, Functional Testing
Geb + テストフレームワーク を利用する

 Page Object with Spock
Groovy を利用する
Power Assert によるテスト
import org.junit.Test

class CampaignRateTest {
! private CampaignRate testee = new CampaignRate()

!   @Test
!   public void testGetRateWithBook_Assert() {
!   ! Cart cart1 = createCart true, 5, 3000
!   ! assert testee.getRateWithBook(cart1) == 5
!   }
!   def createCart(existBooks, itemCount, totalPrice) {
!   ! Cart cart = new Cart()
!   ! cart.setExistBooks existBooks
!   ! cart.setItemCount itemCount
!   ! cart.setTotalPrice totalPrice
!   ! cart
!   }
}
Spock Framework を利用する
Spock Framework とは
Groovy ベースのテストフレームワーク

 プログラマに焦点を当てたBDDツール

JUnit 互換で IDE 統合も容易

ノイズの少ないテストコード

ユニットテストも機能テストも対応可能
Spock による Mock テスト

import spock.lang.Specification

class CampaignRateMockSpec extends Specification {
! CampaignRate testee = new CampaignRate()

!   def "Mockを用いて、カート内にキャンペーン商品が存在するかを確認する。"() {
!   !   setup:
!   !   ItemCheck cart = Mock()
!   !   cart.existBooks() >> true

!   !   expect:
!   !   testee.hasCampaignItem(cart) == true
!   }
}
Spock によるデータドリブンテスト

import spock.lang.Specification
import spock.lang.Unroll

class HelloFukuokaSpec extends Specification {

!   @Unroll
!   def "稚加榮のランチメニューの文字数を確認する" () {
!   !   expect:
!   !   menu.size() == length

!   !   where:
!   !   menu      | length
!   !   "和定食"     |3
!   !   "そば定食" | 4
!   }
}
Spock による機能テスト
import spock.lang.Specification


class StackSpec extends Specification {
   def stack = new Stack()

!   def "push したものは、peek により取り出せる" () {
!   !   when:
!   !   stack.push "something"

!   !   then:
!   !   stack.size() == 1
!   !   stack.peek() == "something"
!   }
}
Geb + テストフレームワーク
を利用する
Geb とは
Groovy で実装された自動化ライブラリ

WebDriver をラップし、jQuery 的な記述が可能

 Page Object パターンで画面を構造化すると
 さらに使いやすい

様々なテストフレームワークと連携可能

 JUnit, Spock, Easyb, TestNG, Cuke4Duke
Geb + Spock によるWebテスト
import geb.spock.GebReportingSpec
import org.jggug.demo.pages.*

class WebTestSpec extends GebReportingSpec {

    def "Hello画面で[JGGUG]と入力しgreetボタンを押すと Greet画面に遷移し[Hello, JGGUG]と表示する。"() {

        when:
        to HelloPage

        username = 'JGGUG'

        and:
        greetButton.click()

        then:
        at GreetingPage

        and:
        h1Text == 'Hello, JGGUG!'
    }
}
参考URL
Spock
 http://code.google.com/p/spock/
 https://github.com/spockframework/spock
Geb
 http://www.gebish.org/
 https://github.com/geb/geb
Spock開発環境

 http://d.hatena.ne.jp/absj31/20120806/1344272593
Java のコードを 1/4 にする
グルービーなテスト
を導入しよう!
2012/09/01 G* ワークショップ in 福岡

綿引 琢磨

Mais conteúdo relacionado

Mais procurados

PHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めようPHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めよう
Yuya Takeyama
 
Getting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnit
Atsuhiro Kubo
 
PySide/QtWebkitで楽々 slideshare Hack
PySide/QtWebkitで楽々 slideshare HackPySide/QtWebkitで楽々 slideshare Hack
PySide/QtWebkitで楽々 slideshare Hack
Kazushige TAKEUCHI
 
ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成
ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成
ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成
Fuminobu TAKEYAMA
 
TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎
Etsuji Nakai
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
Naruto TAKAHASHI
 

Mais procurados (20)

PHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めようPHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めよう
 
わんくま名古屋 #32 (20140823) TDD道場 #20
わんくま名古屋 #32 (20140823) TDD道場 #20わんくま名古屋 #32 (20140823) TDD道場 #20
わんくま名古屋 #32 (20140823) TDD道場 #20
 
CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料
 
JavaのテストGroovyでいいのではないかという話
JavaのテストGroovyでいいのではないかという話JavaのテストGroovyでいいのではないかという話
JavaのテストGroovyでいいのではないかという話
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミング
 
GitとCIとかチャットとかをオンプレで運用する話
GitとCIとかチャットとかをオンプレで運用する話GitとCIとかチャットとかをオンプレで運用する話
GitとCIとかチャットとかをオンプレで運用する話
 
ゼロから始めたE2Eテスト
ゼロから始めたE2Eテストゼロから始めたE2Eテスト
ゼロから始めたE2Eテスト
 
Python × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack botPython × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack bot
 
Bluetoothでgo!
Bluetoothでgo!Bluetoothでgo!
Bluetoothでgo!
 
Getting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnit
 
書こう! 使おう! 単体テスト
書こう! 使おう! 単体テスト書こう! 使おう! 単体テスト
書こう! 使おう! 単体テスト
 
Python Autotest pdc2008w
Python Autotest pdc2008wPython Autotest pdc2008w
Python Autotest pdc2008w
 
PySide/QtWebkitで楽々 slideshare Hack
PySide/QtWebkitで楽々 slideshare HackPySide/QtWebkitで楽々 slideshare Hack
PySide/QtWebkitで楽々 slideshare Hack
 
ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成
ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成
ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成
 
書こう! 使おう! 単体テスト
書こう! 使おう! 単体テスト書こう! 使おう! 単体テスト
書こう! 使おう! 単体テスト
 
TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
 
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境
 
Trat sprint6
Trat sprint6Trat sprint6
Trat sprint6
 
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)
 

Destaque

G*におけるソフトウェアテスト・シーズンIII
G*におけるソフトウェアテスト・シーズンIIIG*におけるソフトウェアテスト・シーズンIII
G*におけるソフトウェアテスト・シーズンIII
Takuma Watabiki
 
Closures and methodMissing are real
Closures and methodMissing are realClosures and methodMissing are real
Closures and methodMissing are real
Takahiro Sugiura
 

Destaque (12)

G*Magazineを読もう
G*Magazineを読もうG*Magazineを読もう
G*Magazineを読もう
 
JGGUG Community LT 2016
JGGUG Community LT 2016JGGUG Community LT 2016
JGGUG Community LT 2016
 
スーパー戦隊進化論
スーパー戦隊進化論スーパー戦隊進化論
スーパー戦隊進化論
 
Spock's world
Spock's worldSpock's world
Spock's world
 
あなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CIあなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CI
 
Spring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswersSpring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswers
 
Gradleどうでしょう
GradleどうでしょうGradleどうでしょう
Gradleどうでしょう
 
G*におけるソフトウェアテスト・シーズンIII
G*におけるソフトウェアテスト・シーズンIIIG*におけるソフトウェアテスト・シーズンIII
G*におけるソフトウェアテスト・シーズンIII
 
システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法
 
Devsumi2012 JGGUG LT
Devsumi2012 JGGUG LTDevsumi2012 JGGUG LT
Devsumi2012 JGGUG LT
 
Grailsでドメイン駆動設計を実践する時の勘所
Grailsでドメイン駆動設計を実践する時の勘所Grailsでドメイン駆動設計を実践する時の勘所
Grailsでドメイン駆動設計を実践する時の勘所
 
Closures and methodMissing are real
Closures and methodMissing are realClosures and methodMissing are real
Closures and methodMissing are real
 

Semelhante a Gws in fukuoka

TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
Nobuhiro Sue
 
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
kojiokb
 
Test Plugins
Test PluginsTest Plugins
Test Plugins
ykhr
 
2012 kanemotolablecture1
2012 kanemotolablecture12012 kanemotolablecture1
2012 kanemotolablecture1
ytanno
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
kimukou_26 Kimukou
 

Semelhante a Gws in fukuoka (20)

脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに
 
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験
 
世界をすこしだけ前に進めるということ
世界をすこしだけ前に進めるということ世界をすこしだけ前に進めるということ
世界をすこしだけ前に進めるということ
 
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackGroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
 
FlexUnit4とMockitoFlex
FlexUnit4とMockitoFlexFlexUnit4とMockitoFlex
FlexUnit4とMockitoFlex
 
tech talk about JS #0
tech talk about JS #0tech talk about JS #0
tech talk about JS #0
 
テスト駆動開発の導入ーペアプログラミングの学習効果ー
テスト駆動開発の導入ーペアプログラミングの学習効果ーテスト駆動開発の導入ーペアプログラミングの学習効果ー
テスト駆動開発の導入ーペアプログラミングの学習効果ー
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
 
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
 
iOSアプリケーションの Unit Test
iOSアプリケーションの Unit TestiOSアプリケーションの Unit Test
iOSアプリケーションの Unit Test
 
Test Plugins
Test PluginsTest Plugins
Test Plugins
 
翻訳から始めるVue.js 入門
翻訳から始めるVue.js 入門翻訳から始めるVue.js 入門
翻訳から始めるVue.js 入門
 
JavaOne2013報告会 JavaFX Update
JavaOne2013報告会 JavaFX UpdateJavaOne2013報告会 JavaFX Update
JavaOne2013報告会 JavaFX Update
 
2012 kanemotolablecture1
2012 kanemotolablecture12012 kanemotolablecture1
2012 kanemotolablecture1
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 
G* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - IntroductionG* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - Introduction
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
 
Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Microsoft DevOps Hackathon (Sep 2015) Team 4 PresentationMicrosoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
 
第5回勉強会
第5回勉強会第5回勉強会
第5回勉強会
 
Xcode 6の新機能
Xcode 6の新機能Xcode 6の新機能
Xcode 6の新機能
 

Gws in fukuoka

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n