敲碗敲到碗快破了嗎?是的,【#針對遺留代碼加入單元測試的藝術】今年十一月梯次,預計加入支援 #Python 與 #Kotlin 了!
課程介紹與報名:https://dotblogs.com.tw/hatelove/2020/05/08/Unit-testing-effectively-with-legacy-code-202011
—
Kotlin 本身的語言特性讓單元測試沒那麼容易寫,然而框架則優雅地解決了這問題。
Python 本身的語言特性則讓單元測試非常好寫,但因為 Python 寫法太自由,所以因應不同的寫法,要有對應不一樣的解決方式。(例如其他語言都以 class/struct 為基底, Python 跟 JavaScript 卻可以直接以 function 為基本元素)
—
#註:因為十一月梯次開始的內容同時支援 C#, Java, Kotlin, PHP, Python 五個語言,上課示範將以學員使用最多的語言進行 live coding,以及若在該 lab 不同語言可能有特別值得一提的關注點,也會額外拉出來講解。
各種語言我都會提供對應的 repository 與每個step 的 commit history, 每個段落也都有每一步的操作影片,供上課時學員可以對著 commit history 在 IDE 上練習,所以請不用擔心跟不上,或是聽懂卻無法跟著實作的問題。
重點在概念,上課或課後的實作練習,有完整的 branch, commit history (重點筆記都在 commit comments 上了),以及對應的影片可以參考。
不怕你練,怕你不練。不怕你問,怕你不問。
—
需求跟問題是中性的,是不分語言的。撇除語言特性不說,在 legacy code 上要加入單元測試,會碰到的問題萬變不離其宗,學會這個核心的概念,你就不會再怕 legacy code 了。
—
今天晚上我會把 python 的內容也補上該課程介紹中。
該梯次目前只剩下 #四個位置,錯過就等2021 吧。
「stub function」的推薦目錄:
stub function 在 91 敏捷開發之路 Facebook 的最讚貼文
之前曾介紹過如何透過 extract and override 來針對大部分不具可測試性的 legacy code,如何在不改變 production code 的外貌下,撰寫 isolated unit test。
(傳送門:https://dotblogs.com.tw/…/26/unit-test-by-extract-and-overr…)
然而手刻測試目標替身 class 只為了覆寫注入 stub 的值,總是看起來不夠漂亮。
然而 protected 本身就是不希望被外部看見,所以一般的 mock framework 也無能為力。
即使可以透過 reflection 取出 protected function 來使用,但卻不容易 override 該目標本身的 protected function 內容。
這篇文章介紹如何透過 Moq 的 ProtectedMock 來解決手刻替身物件覆寫 protected function 的麻煩,讓我們可以使用跟一般 stub 物件的 API 來達到目的。