Java のコードを 1/4 にするグルービーなテストを導入しよう!2012/09/01 G* ワークショップ in 福岡綿引 琢磨
自己紹介綿引琢磨(わたびきたくま)株式会社デライトテクノロジーズ 代表取締役JGGUG運営委員/ぐるーびーたん原作ダークサイドの人twitter : @bikisuke
今どきのテスト事情xUnit、TDD(BC) の普及書籍、情報の充実エンジニアの意識の変化それでも... テストツールの利用率は3割弱 http://itpro.nikkeibp.co.jp/article/COLUMN/20110512/36...
そのテストは何のため?目的が曖昧なテストパターン網羅できていないリファクタリングの足かせになっているテスト共通化のしすぎ or 冗長なコードMock が大変
幸せになるためには・・・テストの基礎を学ぶテスト戦略、テスト計画、テスト技法テストコードのリファクタリング不要なテストコードを捨てる簡潔にテストを書けるツールを採用する
そこで グルービー    ですよ
グルービーなテストをしよう!
グルービーなテストGroovy を利用する Power AssertSpock Framework を利用する Mock, Data Driven Testing, Functional TestingGeb + テストフレームワーク を利用す...
Groovy を利用する
Power Assert によるテストimport org.junit.Testclass CampaignRateTest {! private CampaignRate testee = new CampaignRate()!   @Tes...
Spock Framework を利用する
Spock Framework とはGroovy ベースのテストフレームワーク プログラマに焦点を当てたBDDツールJUnit 互換で IDE 統合も容易ノイズの少ないテストコードユニットテストも機能テストも対応可能
Spock による Mock テストimport spock.lang.Specificationclass CampaignRateMockSpec extends Specification {! CampaignRate testee = n...
Spock によるデータドリブンテストimport spock.lang.Specificationimport spock.lang.Unrollclass HelloFukuokaSpec extends Specification {!   ...
Spock による機能テストimport spock.lang.Specificationclass StackSpec extends Specification {   def stack = new Stack()!   def "push ...
Geb + テストフレームワークを利用する
Geb とはGroovy で実装された自動化ライブラリWebDriver をラップし、jQuery 的な記述が可能 Page Object パターンで画面を構造化すると さらに使いやすい様々なテストフレームワークと連携可能 JUnit, Spo...
Geb + Spock によるWebテストimport geb.spock.GebReportingSpecimport org.jggug.demo.pages.*class WebTestSpec extends GebReportingS...
参考URLSpock http://code.google.com/p/spock/ https://github.com/spockframework/spockGeb http://www.gebish.org/ https://githu...
Java のコードを 1/4 にするグルービーなテストを導入しよう!2012/09/01 G* ワークショップ in 福岡綿引 琢磨
Upcoming SlideShare
Loading in …5
×

Gws in fukuoka

1,342 views
1,255 views

Published on

G*ワークショップ in 福岡の資料です。

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,342
On SlideShare
0
From Embeds
0
Number of Embeds
48
Actions
Shares
0
Downloads
8
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Gws in fukuoka

    1. 1. Java のコードを 1/4 にするグルービーなテストを導入しよう!2012/09/01 G* ワークショップ in 福岡綿引 琢磨
    2. 2. 自己紹介綿引琢磨(わたびきたくま)株式会社デライトテクノロジーズ 代表取締役JGGUG運営委員/ぐるーびーたん原作ダークサイドの人twitter : @bikisuke
    3. 3. 今どきのテスト事情xUnit、TDD(BC) の普及書籍、情報の充実エンジニアの意識の変化それでも... テストツールの利用率は3割弱 http://itpro.nikkeibp.co.jp/article/COLUMN/20110512/360286/?ST=develop
    4. 4. そのテストは何のため?目的が曖昧なテストパターン網羅できていないリファクタリングの足かせになっているテスト共通化のしすぎ or 冗長なコードMock が大変
    5. 5. 幸せになるためには・・・テストの基礎を学ぶテスト戦略、テスト計画、テスト技法テストコードのリファクタリング不要なテストコードを捨てる簡潔にテストを書けるツールを採用する
    6. 6. そこで グルービー ですよ
    7. 7. グルービーなテストをしよう!
    8. 8. グルービーなテストGroovy を利用する Power AssertSpock Framework を利用する Mock, Data Driven Testing, Functional TestingGeb + テストフレームワーク を利用する Page Object with Spock
    9. 9. Groovy を利用する
    10. 10. Power Assert によるテストimport org.junit.Testclass 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! }}
    11. 11. Spock Framework を利用する
    12. 12. Spock Framework とはGroovy ベースのテストフレームワーク プログラマに焦点を当てたBDDツールJUnit 互換で IDE 統合も容易ノイズの少ないテストコードユニットテストも機能テストも対応可能
    13. 13. Spock による Mock テストimport spock.lang.Specificationclass CampaignRateMockSpec extends Specification {! CampaignRate testee = new CampaignRate()! def "Mockを用いて、カート内にキャンペーン商品が存在するかを確認する。"() {! ! setup:! ! ItemCheck cart = Mock()! ! cart.existBooks() >> true! ! expect:! ! testee.hasCampaignItem(cart) == true! }}
    14. 14. Spock によるデータドリブンテストimport spock.lang.Specificationimport spock.lang.Unrollclass HelloFukuokaSpec extends Specification {! @Unroll! def "稚加榮のランチメニューの文字数を確認する" () {! ! expect:! ! menu.size() == length! ! where:! ! menu | length! ! "和定食" |3! ! "そば定食" | 4! }}
    15. 15. Spock による機能テストimport spock.lang.Specificationclass StackSpec extends Specification { def stack = new Stack()! def "push したものは、peek により取り出せる" () {! ! when:! ! stack.push "something"! ! then:! ! stack.size() == 1! ! stack.peek() == "something"! }}
    16. 16. Geb + テストフレームワークを利用する
    17. 17. Geb とはGroovy で実装された自動化ライブラリWebDriver をラップし、jQuery 的な記述が可能 Page Object パターンで画面を構造化すると さらに使いやすい様々なテストフレームワークと連携可能 JUnit, Spock, Easyb, TestNG, Cuke4Duke
    18. 18. Geb + Spock によるWebテストimport geb.spock.GebReportingSpecimport 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! }}
    19. 19. 参考URLSpock http://code.google.com/p/spock/ https://github.com/spockframework/spockGeb http://www.gebish.org/ https://github.com/geb/gebSpock開発環境 http://d.hatena.ne.jp/absj31/20120806/1344272593
    20. 20. Java のコードを 1/4 にするグルービーなテストを導入しよう!2012/09/01 G* ワークショップ in 福岡綿引 琢磨

    ×