宮國 渡 (MIYAGUNI, Wataru)
プログラムに期待される「振る舞い」や「制約条件」、 つまり「要求仕様」に近い形で、自然言語を併記しながら テストコードを記述する (via ビヘイビア駆動開発 - Wikipedia)
振舞例
Google にアクセスして、検索欄に「Cucumber」って入力したあと、
「検索」ボタンを押せば、Cucumber について書かれた
ページ一覧が表示されるよ!
$ gem install cucumber
Google で "cucumber github" を検索すると
"Ruby on Rails - cucumber - Github" と書かれたページが得られる
$ cat search.feature
Feature: Search
Scenario: Find what I'm looking for
Given I am on the Google search page
When I search for "cucumber github"
Then I should see "Ruby on Rails - cucumber - GitHub"
Scenario: Find what I'm looking for
Given I am on the Google search page
When I search for "cucumber github"
Then I should see "Ruby on Rails - cucumber - GitHub"
1 scenario (1 passed)
3 steps (3 passed)
0m4.825s
|-- cucumber.yml # 実行時設定ファイル
`-- features
|-- search.feature # テスト
|-- step_definitions
| `-- search_steps.rb # ステップ
`-- support
|-- env.rb # 環境設定
Given 'I am on the Google search page' do
@browser.goto 'http://www.google.com/'
end
When /I search for "(.*)"/ do |query|
@browser.text_field(:name, 'q').set(query)
@browser.button(:name, 'btnG').click
end
Then /I should see/ do |text|
@browser.text.should =~ /#{text}/m
end
44カ国語をサポート
$ cucumber --i18n ja
| feature | "フィーチャ", "機能" |
| background | "背景" |
| scenario | "シナリオ" |
| examples | "例", "サンプル" |
| given (code) | "前提" |
| when (code) | "もし" |
| then (code) | "ならば" |
| and (code) | "かつ" |
| but (code) | "しかし", "但し", "ただし" |
|
|
前提 'Google トップページに居る' do
@browser.goto 'http://www.google.com/'
end
もし /"(.*)を検索した時"/ do |query|
@browser.text_field(:name, 'q').set(query)
@browser.button(:name, 'btnG').click
end
ならば /"(.*)"と表示されている/ do |text|
@browser.text.should =~ /#{text}/m
end
機能: 検索する
シナリオ: 検索した結果を表示
前提 Google トップページに居る
もし "cucumber github"を検索した時
ならば "Ruby on Rails - cucumber - GitHub"と表示されている
$ gem install capybara
selenium-webdriver
実際にブラウザを動かしながらテストを行う
culerity(celerity)
HtmlUnit (Java) と Cucumber (Ruby) をつなげる役割(JRuby)
headless browser (UIなし) でテストを行う。
culerity 使えば cron で毎晩ひっそり動かして、その日の分のテストを勝手に!
UnitTest を Rspec で、そこで不足な部分を Cucumber で!
Firefox、Safari、IE 等に対応した headless なテストができる
Rails とかと組み合わせやすいメソッドとかいろいろ
ものによって JavaScript 対応非対応があるので
今日使った資料
http://gongo.github.com/javakuche/100612/slide.html
cucumber の feature もろもろ
http://github.com/gongo/gongo.github.com/tree/master/javakuche/100612