iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 5
0
自我挑戰組

TDD - 紅燈,綠燈,重構,30天 TDD之路有你有我系列 第 5

Day5. 套路的開始啦-Codewars_Remove First and Last Character

  • 分享至 

  • xImage
  •  

首先就從Codewars的8kyu開始唄,我會因為題目簡單而腦補之後的需求可能性進行一點彈性和可讀性的實作

Codewars的題目是有分等級的,最簡單的是8kyu然後數字越小越難,越容易牽扯到「效能」的問題,如果有其他見解的朋友歡迎跟我討論XDD

這30天的練習過程大概最低只會用到4~6kyu的範圍,而一開始我們就先從最簡單的來牛刀小試一下唄

這一次的題目是隨機出來的,反正就隨便挑了一題啦XDDD
(Codewars會每週寄信一些題目,今天這題就是從信裡面來的

廢話不多說就來看看題目吧,今天的題目非常簡單(廢話 因為是8kyu啊XD

https://ithelp.ithome.com.tw/upload/images/20171222/20107209mdiWm1iDlA.png

今天的題目需求很簡單,只要把輸入的字串去掉前後第一個字元即可,且不需要考慮低於兩個字元的字串。

題目範例輸入輸出顯示,如果輸入空字串,則印出小寫的ok,這邊並沒有顯示如果輸入1個字元時會發生什麼事情,這時候因為我們現在沒有Product Owner所以我們就把它當作輸入1個時,也要印出ok吧。

https://ithelp.ithome.com.tw/upload/images/20171222/201072094ACi9jx712.png

接下來要拆解需求啦

  1. 去除首字元
  2. 去除尾字元
  3. 字串長度未滿2個時印出「ok」

可以看得出來第1個需求和第2個需求是可以合在一起做撒尿牛玩的,啊不是我是說可以合在一起用Substring做掉的。

https://ithelp.ithome.com.tw/upload/images/20171222/20107209yVKSApVo1P.jpg

接下來開始實作吧! 把專案創建好之後,就把第一個測試案例名稱寫出來吧!
我們要從最簡單的第一步開始,如果覺得一開始有點卡卡的就可以加入3A原則的註解唷!

https://ithelp.ithome.com.tw/upload/images/20171222/20107209yqI9sFOewt.png

接下來就可以寫Code,一開始Test Case中的Code會長這樣

https://ithelp.ithome.com.tw/upload/images/20171222/2010720986tu29R3VY.png

而Production Code 就長這樣

https://ithelp.ithome.com.tw/upload/images/20171222/201072093DuBypqoye.png

接下來就跑一下測試,理所當然的會Fail,如果過了就見鬼了,這裡就可以看見我們的第一個紅燈,這時候來Commit一下吧

https://ithelp.ithome.com.tw/upload/images/20171222/20107209VI9yaJunNF.png

接下來把Production Code改一下吧,用最小步伐讓Test Case Pass!

https://ithelp.ithome.com.tw/upload/images/20171222/20107209SWpNuabXrj.png

接下來跑個測試,很明顯的他亮了我們這個題目的第一個綠燈! YA!

https://ithelp.ithome.com.tw/upload/images/20171222/20107209i7G6BJfeqd.png

接下來充新審視一下Code,摁,看起來根本不需要更改,我們就寫第二個Test Case吧!
這時候來Commit一下吧

現在寫了第二個test case,因為我是一個比較謹慎的人類,所以我寫了一個一定會過的test case

https://ithelp.ithome.com.tw/upload/images/20171222/201072095bt5t9iasp.png

很正常的他也綠燈了

https://ithelp.ithome.com.tw/upload/images/20171222/20107209qyzTqXzEaq.png

接下來審視一下test code吧!
會發現其實他們每個都蠻多冗長的宣告過程,於是我把它重構了一下,test case就變成這個樣子了,簡短,也明瞭,把兩個test code 都重構完成然後跑完測試都pass後,就commit一下吧!

Tips: 如果你有Resharper 那就用Ctrl +R + I讓他inline解決吧XD

https://ithelp.ithome.com.tw/upload/images/20171222/20107209V1075NXnhk.png

接下來寫第三個test case吧!

https://ithelp.ithome.com.tw/upload/images/20171222/20107209Zqjve4pWRm.png

寫完測試就來跑一下測試吧!
很明顯的這一次他也乖乖的亮紅燈了

https://ithelp.ithome.com.tw/upload/images/20171222/20107209jCvfNEmwLr.png

接下來就來改Production Code吧!!!

https://ithelp.ithome.com.tw/upload/images/20171222/201072097sF0mwtgpX.png

改好之後來跑個測試吧! 很正常的 我會自己跑過了才說他過了嘛!
所以他過了

https://ithelp.ithome.com.tw/upload/images/20171222/20107209UW14EGyhJ9.png

基本上現在的測試已經可以涵蓋所有輸入了,不過我這個人是謹慎的人所以我們來多寫幾個測試案例吧!!!

https://ithelp.ithome.com.tw/upload/images/20171222/201072097ntodRVhhh.png

現在回過頭來看看我們的Production Code吧!
看有沒有重構的可能性

接下來Production Code就變這樣了,用三元運算式的方式把他表示

https://ithelp.ithome.com.tw/upload/images/20171222/20107209N5mNbBwQ1p.png

跑過測試都All Pass 之後就再Commit一次吧!

然後再Codewars上提交! Pass!!

https://ithelp.ithome.com.tw/upload/images/20171222/201072090wbFw0yz8U.png

通過! 接下來我最喜歡的部分就是去看看別人寫這題寫得如何XD

https://ithelp.ithome.com.tw/upload/images/20171222/20107209VBVbC8Czsv.png

第一個就真的完全不把輸入StringEmpty放在眼裡直接用SubString的方法幹出來了XDDD

看起來我這一次寫的跟大家差不多XDD

這是這一次的Git Url
歡迎大家來參考參考XDD
https://github.com/SQZ777/Codewars_RemoveFirstandLastCharacter.git

下一題,明天見!


上一篇
Day4. 從創建一個測試專案開始-MS Test
下一篇
Day6. 繼續牛刀小試的概念-Codewars_Fake Binary
系列文
TDD - 紅燈,綠燈,重構,30天 TDD之路有你有我30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言