Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Gws in fukuoka

1,651 views

Published on

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

Published in: Technology
  • Be the first to comment

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 福岡綿引 琢磨

×