看板Soft_Job
: 推 lunastorm:我最近也碰到這個問題,的確碰到db這段就是在整合測試了 05/17 10:24
: 推 Ting1024:我也碰到這問題... 05/17 20:05
: → newjoy:好吧, 那換個問法 有辦法不讓這些整合測試作廢嗎 05/17 22:07
有,就是把這些整合測試變成單元測試。
如果你的整合環境是變動大的,無法預測的,每次都有不同的驚喜的,
那我建議你不要做自動化整合測試。如果你連手動測試都沒有辦法每次
都產生一致性的結果,你應該回去看看你的Production Code有沒有問題
。
你需要去計算撰寫整合測試的投資報酬率,我有朋友告訴我,如果你的自動化整合測試
不能夠在沒有修改的狀況下使用17個Release,那麼這個自動化整合測試可能就沒有進行
的價值,因為你最終還是必須要進行手動測試,你無法相信自動化測試的結果。(雖然我
不知道這個數字是哪裡來的)
你必須先問問你自己,有沒有先做單元測試。沒有單元測試就做整合測試的話,會讓
整合測試的Case變很多,而出錯的機率也會提高很多,出錯以後,沒有單元測試的幫
忙,你必須回去看自己的單元有沒有錯。進而加長了除錯的時間。
你現在要做的,是回去把單元測試給做好,而不是投入在自動化整合測試上面。
你可以使用Test Framework裡面的Stub物件或是Mock物件去取代資料庫物件的行為
,比如說,你不需要知道資料庫插入的結果是不是在資料庫多了一行,而是要確認
當資料庫回傳True的時候,你的程式會正確往下做,而當資料庫回傳False的時候
,你的程式碼能夠抓到這個錯誤,並且做出適當的回應。
Unit Test Focus在白箱測試,希望每個判斷、迴圈跟程式碼都被執行過一遍,如果
你覺得你的Unit Test Code很難跟資料庫切開,表示你的Product Code沒寫好,
跟外部資源過度耦合,你首先要做的是Refactory你的Production Code,提高它的
Testability。
也許你可以貼上程式片段讓大家討論一下。
--
◆ From: 118.166.227.62
※ 批踢踢實業坊(ptt.cc)※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1305646232.A.48C.html
→ newjoy:我想問 private的method要怎麼測才好? 有看到寫程protected 05/18 01:13
→ newjoy:但這畢竟不是最佳解 05/18 01:13
推 wawawa:private method 要不要測有兩派說法 我個人是覺得不用測 05/19 01:25
→ wawawa:可以先專注把 public method 的 test coverage 提高再說... 05/19 01:25