SkillTree 自動測試與 TDD 實務開發(使用C#) 第五梯 課後心得

  • 298
  • 0

寫程式怕東怕西?

你改了東,壞了西?

我的程式沒問題?

透過這三天的課程,我覺得,只要我相信,狀況就會改變。

這次上課的講師是91,又是一個我Follow很久的一個偶像等級人物。

這是他的部落格(In 91)。

這次上課的流程也大致可以透過91寫的系列文章(30天快速上手TDD)一窺一二。

推薦若有考慮是否要花錢去上課,先看完一整個系列,你完全懂,恭喜這課程我覺得對你來說效益不大。

若,整個霧煞煞,快鎖定SkillTree,然後,把你所有問題帶到課堂上拼命問。

回到正題,我承認,對於TDD這個議題,在上課以前我就如同91文章內所寫。

  • TDD不過就是一種新議題。
  • 單元測試,我哪有那個美國時間。

各種排斥,但,我的程式就是偶有寫錯的地方。

以最近一個錯誤來說,使用者查詢條件是:XX編號為XXXXX,但,我的Linq就是下XX名稱為XXXXX。

錯誤夠低級了吧!!!

換新公司以後,其實專案上都有單元測試的專案在,沒寫過的我,也糊裡糊塗的跟著寫。

但,說真的,就是依樣畫葫蘆,只知道,我必須寫測試程式。

其實,說真的跟以前寫程式沒什麼不同,差別在,我去寫了一段驗證他的程式。

而,驗證的這段程式很可能是我為了綠燈而讓它綠燈。

現在,我相信未來我寫的測試程式會真正的讓人懂,讓人體會它的好。

我也不再如此的迷惘。。。

或許,你認為我太把這堂課神話,但,認真上課後的我就是如此。

你要我來講這門課有什麼不好的地方嗎!?有。。。

  • 上課的講義不是完整版本,有提供紙本,上面有空白處上課時頭影片會有答案。(91有聽到大家的心聲,說會提供填空答案)
  • 三天各自有Lab檔案,Lab檔案希望可以不要加密。
  • Lab檔案也可以先提示每個Lab的大致用意。
  • 最終串起BDD這個部分感覺時間太趕,應該還有很多案例或實戰中的經驗可以分享&傳授。

講講我自己上課的方式:

  • 紙本講義我一行都沒抄,專注當下的解釋。(還好後續有提供)
  • 老師在Live操作Lab,不要怕沒跟上,就只顧著跟著老師打字。(為何而寫比較重要。語法不會有助教、有老師在實做時間來幫你)
  • 一有問題就問,91&助教耐心一等一。
  • 作業一定要寫,91親自幫你CodeReview,機會太難得。
  • 來上課一定有某種目的,記得三天結束前取得你想要的目的。

再來講講,我學到了什麼:

  • 解除相依、關注點分離的重要。
  • 單元測試起手勢 => 3A原則。(Arrange、Actual、Assertion)
  • 面對傳奇程式碼如何讓它也可以有測試保護我們的修改或重構。
  • 活用 NSubstitute 瞭解Stub、Mock兩種本質上不同。
    • Stub => 模擬相依物件回傳的值為何。(擁有實際回傳值)
    • Mock => 用來做Assert,驗證互動。(是否有呼叫某個Function、呼叫幾次等等)
  • 測試覆蓋率神話,重點真的不是覆蓋率。(但,若公司政策還是當標準,好像還是無解)
  • 透過Firefox套件進行網頁測試(Selenium IDE
  • 承上,將錄製的結果做成UnitTest的程式碼。
  • 紅燈、綠燈、重構的良性循環,不要一次幹完所有Production Code。(這點我想我還要好一段時間適應)
  • 看開了!當需求單位沒有提出需求,切莫腦補。(這點頗難,因為從頭到尾需求單位都覺得你應該知道)
  • Specflow 透過說故事的方式迅速寫出TestCode。(這讓我太驚艷)
  • 透過EntityFramework來做整合測試。
  • Pickles 有生命的文件產出工具,測試情境到哪裡文件就到哪裡。
  • 不管是寫單元測試或是TDD、BDD,不是強調你寫多少測試程式,而是要真正給你帶來正面的能量。

下星期我就要再公司內部開分享會了,也開始陸續作屬於自己的LAB。

主要講xUnit,但,這三天下來好多東西可以講,迫不及待與團隊們分享。

91好像有講一句話,我也不確定有沒有了。

現在我想說:相信改變(開始寫測試),我的程式就會變的很可靠。

這三天只是一個起始,未來肯定在實務上遇到更多的問題,相信撐下去就是我的拉!!