《代碼之美》第7章 漂亮的測試 的bad smell

 這章基於二分查找討論了一個漂亮的測試應該怎麼做。
先看看原文怎麼做。這裏的討論省略了隨機,性能,數組中元素重複,以及輸入爲null的情況。



作者先是建立了Theory1,2作爲驗證的手段,然後發現Theory1,2有漏洞,於是補充上Theory3,4形成一個測試組。

但是仔細研究這段代碼發現還是有問題的。
一個很微小的瑕疵就是Theory4的定義和實現不一致,Theory4的code驗證包含了Theory4的理論推理。

本來這個也沒有什麼了不起,但是讓我們從頭開始回顧爲什麼要測試二分查找。
答:簡單的查找不容易錯但是慢,所以我們需要速度快的二分查找。
但是二分查找涉及了一些求中值啊,改變上下限的操作,容易出錯,所以我們需要測試二分查找。

Aha,getTargetPosition本身就是一個符合二分查找規範的簡單查找(除了性能),而且因爲其簡單,我們肉眼檢查可以確信該實現是正確的。思路來了,用一個正確的慢的實現去驗證一個快的實現。

原來的Theory1,2,3,4變成了一個,任何情況下,二分查找應該和一個符合二分查找功能規範(除了性能)的簡單查找的結果相同。

Refine後的代碼如下。

 
嗯,code變少了,更簡潔漂亮了,I like it。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章