義大利 波隆那兒童書展€¦ · 到了晚上必定點上一盞燈,讓燈亮 一整夜,因此這座教堂名為「小燈教 堂」。教堂中有一幅壁畫,畫中耶穌
PhpSpec TDD 紅燈-綠燈-重構流程-PHP也有day#25_by_閃亮亮
Transcript of PhpSpec TDD 紅燈-綠燈-重構流程-PHP也有day#25_by_閃亮亮
•
• KKBOX
• Laradiner
• http://blog.dj1020.net • dj1020(at)gmail.com
TDD
✦
✦
✦ (Spec)
✦ (RED) -> (GREEN) -> (REFACTOR)
TDD ✦
✦ API
✦ debug
✦
✦ Procedural Programming OOP
Kata ✦
✦
Code
✦
✦ TDD Kata TDD
Kata
Kata http://www.codingdojo.org/cgi-bin/index.pl?KataCatalogue
Kata ✦ ( )
✦
✦ ()
✦ TDD
✦ Editor
✦
Bowling Kata
✦ 10
10
Bowling
✦ 10 Strike 10
✦ 10 Spare10
✦ Strike Spare
Bowling Kata
✦
✦ BowlingGame Class methods
1. score()
2. roll($pins)
Let’s Do It
TDD $ git init BowlingKata
$ cd BowlingKata
$ composer init
$ composer require phpspec/phpspec
$ ./vendor/bin/phpspec desc Twk/BowlingGame
$ ./vendor/bin/phpspec run
First TestRED
Autoload composer.json
{ "require": { "phpspec/phpspec": "^2.5" }, "autoload" : { "psr-4" : { “Twk\\" : "src/Twk" } } }
$ composer dump
First TestGREEN
Test Case 1RED
20
Test Case 1REDGREEN
20
Test Case 2RED 1 20
Test Case 2REDGREEN 1 20
Test Case 2REDREFACTOR
DRY Extract Method
Test Case 2REDREFACTOR
design
Test Case 3RED
2, 8 Spare 2 10 + 2(bonus) + 2 = 14
Test Case 3REDGREEN
2, 8 Spare 2 10 + 2(bonus) + 2 = 14
Test Case 4RED
2, 8 Spare 2, 5 10 + 2(bonus) + 7 = 19
Oh Oh …(design flaw)
TDD ✦
✦
✦
✦
Test Case
Test Case 3RED
2, 8 Spare 2 10 + 2(bonus) + 2 = 14
Test Case 3REDGREEN
2, 8 Spare 2 10 + 2(bonus) + 2 = 14
Test Case 4REDGREEN
2, 8 Spare 2, 5 10 + 2(bonus) + 7 = 19
Test Case 4REDGREEN
Consolidate Duplicate Conditional Fragments
REFACTOR
Test Case 4REDGREEN
Rename Variables
REFACTOR
Test Case 4REDGREEN
Decompose Conditional Extract Method
REFACTOR
Test Case 4REDGREEN
Extract rollSpace() method
REFACTOR
Test Case 5RED
(Strike) 3, 4
10 + 3(bonus) + 4(bonus) + 7 = 24
Test Case 5RED
(Strike) 3, 4
10 + 3(bonus) + 4(bonus) + 7 = 24
GREEN
Test Case 5RED
Extract isStrike() method Extract rollStrike() method Extract spareBonus() method …
GREENREFACTOR
Test Case 6RED
Perfect Game! 12 300
GREEN
Test Case 7RED
9 Spare 5
… 267
GREEN
Test Case 8 …
Test Case
^o^
Q&A ?