View
5.058
Download
0
Tags:
Embed Size (px)
DESCRIPTION
Citation preview
about me
• 張文鈿 (a.k.a ihower)http://ihower.idv.tw/blog/
• 和多股份有限公司http://handlino.com
http://registrano.com
2009年8月15日星期六
Q: 你為什麼會在這裡?In order ...As a COSCUP 2009 attendeeI want ...
2009年8月15日星期六
Q: 你為什麼會在這裡?In order ...As a COSCUP 2009 attendeeI want ...
[business value] [role][feature]
2009年8月15日星期六
你的驗收準則是?What’s your acceptance criteria?
2009年8月15日星期六
Scenario: 認真的 COSCUP 2009 與會者
Given 一群與會者When ihower 在講演Then 每個人學到一點新東西And 沒有人打瞌睡
許我們一個測試情境:
2009年8月15日星期六
“I believe that the hardest part of software projects, themost common source of project failure, is communication with the customers and users of that software.
By providing a clear yet precise language to deal with domains, a DSL can help improve this communication.”
Martin Fowler
2009年8月15日星期六
“我相信軟體專案最困難的部份、最常見的專案失敗原因,就是與客戶、使用者之間的溝通。
透過提供一個清楚又精準的領域專屬語言 (DSL),將可以改善這個問題”
Martin Fowler
2009年8月15日星期六
剛剛的測試情境(DSL)
如何執行?
2009年8月15日星期六
客戶 程式設計師
測試人員
純文字 Feature
Ruby
Cucumber 是程式設計師與客戶之間的溝通媒介
2009年8月15日星期六
Cucumber Feature 寫法Feature: 要很酷功能描述
Scenario: 厲害的標題 Given <某個情境條件> And <更多情境條件> When <某個動作> And <另一個動作> Then <某個期望結果> And <更多期望結果>
步驟{2009年8月15日星期六
Ruby 程式
純文字
Given 我們喜歡黃瓜
Given /^我們喜歡 (.*)$/ do |fruit| #.... your test code
assert_equal(fruit, '黃瓜')end
程式設計師
客戶
步驟
步驟定義
2009年8月15日星期六
Ruby 程式
純文字
Given 我們喜歡黃瓜
Given /^我們喜歡 (.*)$/ do |fruit| #.... your test code
assert_equal(fruit, '黃瓜')end
程式設計師
客戶
步驟
步驟定義
2009年8月15日星期六
Ruby 程式
純文字
Given 我們喜歡黃瓜
Given /^我們喜歡 (.*)$/ do |fruit| #.... your test code
assert_equal(fruit, '黃瓜')end
程式設計師
客戶
步驟
步驟定義
Regexp match
2009年8月15日星期六
Cucumber 支援各種環境
• Ruby and Rails
• JRuby and Java
• IronRuby and .NET
• FunFX and Flex
• Web apps in any lanuages, with:
• Watir, Selenium, Mechanize, Webrat 等瀏覽器測試工具
2009年8月15日星期六
Cucumber 支援各種語言
!! Koreangurka Swedishcastravete Romanianogórek PolishKurk Estoniandưa chuột Vietnameseuhorka Slovakgurķis LatvianAgurkas LithuanianSalátauborka HungarianKurkku FinnishКраставица BulgarianPepino Portuguese
огурец Russianconcombre FrenchキュウリJapaneseOkurkový CzechGurke German
Cucumber Englishpepino Spanishcetriolo Italianagurk DanishArabic اخليار
ketimun IndonesianHebrew מְלָפְפֹון
Cogombre CatalanCUCUMBR LOLCats
Agurk Norwegian黄瓜!! Korean
gurka Swedishcastravete Romanian
ogórek PolishKurk Estonian
dưa chuột Vietnameseuhorka Slovakgurķis Latvian
Agurkas LithuanianSalátauborka Hungarian
Kurkku FinnishКраставица Bulgarian
Pepino Portuguese
2009年8月15日星期六
來看範例
2009年8月15日星期六
純文字 Feature
功能: 除法 為了避免愚蠢的錯誤 收銀機必須要能夠計算除法 而且必需能顯示非整數的結果 場景: 將兩個數相除 假設我已經在計算機上輸入 3 而且我已經在計算機上輸入 2 當我按下 divide 那麼螢幕上應該顯示 1.5
2009年8月15日星期六
Ruby codeGiven /我已經在計算機上輸入 (\d+)/ do |n| @calc.push n.to_iend When /我按下 (\w+)/ do |op| @result = @calc.send opend Then /螢幕上應該顯示 (.*)/ do |result| @result.should == result.to_fend
2009年8月15日星期六
整合測試Web Integration Testing
2009年8月15日星期六
Feature: 購物車
Scenario: 把書放進購物車 Given I am on the "1934356085" book page When I press "Add to Cart" Then I should see "Programming Ruby 1.9"
2009年8月15日星期六
Ruby Code
Given /^I am on (.+)$/ do |page_name| visit path_to(page_name)end
When /^I press "([^\"]*)"$/ do |button| click_button(button)end
Then /^I should see "([^\"]*)"$/ do |text| response.should contain(text)end
2009年8月15日星期六
Ruby Code
Given /^I am on (.+)$/ do |page_name| visit path_to(page_name)end
When /^I press "([^\"]*)"$/ do |button| click_button(button)end
Then /^I should see "([^\"]*)"$/ do |text| response.should contain(text)end
每個步驟自然而然成為可重複使用的單元,鮮少需要重構測試碼。
2009年8月15日星期六
由外而內的小黃瓜開發方式
{1: 使用純文字描述軟體行為
2: 使用 Ruby 撰寫步驟定義
3: 執行並失敗 (fail)
4. 開始寫程式並通過步驟測試(pass)
4-1. 撰寫 Unit Test 並失敗 (Fail) 4-2 實際寫程式並通過測試 (Pass){
Outside
Inside
2009年8月15日星期六