TDD之犯傻紀錄

TDD的小步前進原則真的很有用

自從上完91的TDD,學會用Specflow以來,這幾個禮拜都在努力熟悉TDD的步調

寫情境->紅燈->寫Product code->綠燈->重構

這樣的循環步調很容易讓人沉浸進去,不知不覺就忘記時間,也忘記了小步前進的原則

今天就連續發生兩次,重構的時候一口氣跑太遠,最後迷路回不來。還好都有記得隨時commit

學到兩個教訓

  1. 隨時跑測試,時時跑測試,尤其commit前,一定要跑測試!
  2. 當測試有異常,一定是自己的程式有問題,一定是最近的修改有問題!

 


事情是這樣的

這是原本的code

var nextHeader = drgRange.Where(w =>
  w.Start.Row > blockFromRow &&
  w.Style.Border.Top.Style == OfficeOpenXml.Style.ExcelBorderStyle.Thin &&
  w.Style.Border.Left.Style == OfficeOpenXml.Style.ExcelBorderStyle.Thin).First();

var relRow = nextHeader.Start.Row - 1;
var relCol = nextHeader.Start.Column;

relation = drgRange.Where(w => w.Start.Row == relRow && w.Start.Column == relCol).First().Text;

萃取method之後變成這樣

relation = drgRange.Where(w => w.Start.Row == GetNextHeader(drgRange, blockFromRow).Start.Row - 1 &&
                                                w.Start.Column == GetNextHeader(drgRange, blockFromRow).Start.Column).First().Text;

自我滿足覺得很厲害,就commit了。這時候犯了第一個傻,沒有先run 所有test。

吃飽飯回來繼續coding,build之後跑測試,發現有幾個測試案例一直不跑完,這時候就慌了,開始亂槍打鳥,一下查ActiveLog.xml找錯誤訊息,一下又懷疑是不是卡檔案,還一個一個停用擴充套件來try,更別提換兩三台電腦交叉試。

最後終於想起來可以對測試案例偵錯。才發現是前面改的那段code,在lambda裡面call method,被call的method又執行lambda。

用Git rollback回去,重跑測試就一路順暢了