對於junit測試和tdd實踐中有如下的疑問,請各位解惑:
junit測試的粒度如何把握?
簡單的說是針對public的方法寫測試就ok了呢?還是說要具體針對public方法中執行邏輯的每個步驟來寫測試方法?
先說一下為什麼會有這種困惑:
業務邏輯比較簡單時,當然只針對public方法的業務流程來設計案例,並只對public方法寫test方法就好。
但最近做乙個保險的專案,計算超複雜的那種,使用者點乙個button後台要操作十幾張表,資料copy來copy去
中間還有各種各樣的計算,設計的業務inte***ce方法中接受user的輸入,然後執行整個操作。
現在談一下兩種實現的方式:
1.按tdd的方式,先寫測試**,再寫實現**,實現過程不斷重構(未完整了解過tdd,只是皮毛,如有誤解見諒)
這種方式實現起來很有難度。首先測試**的覆蓋度很難保證:當複雜的業務邏輯揉在乙個方法中(即使重構拆成若干小方法),流程分支成冪增長,很難一開始就把所有的情形都考慮清楚,即使都考慮到了,寫出來的testcase也可能是超複雜的,反而會成為一種負擔。
另外,這樣來做實際上也就相當於大塊大塊的coding,然後測試,偏離了tdd的本意,coding過程中沒辦法保證做的每一步都是正確的,而是將這個測試推遲到完成了整個實現之後。
2.對整個業務邏輯的實現大致上先分為幾個步驟,每個步驟的實現可以放在protected方法中以便測試,然後再針對每一步來實踐tdd,這樣沒有上述的兩個問題,而且最終程式設計師對自己**的信心會大增。但這樣來做也有一些問題。
首先,每一步驟的方法都是protected才能保證測試,這樣破壞了封裝
其次,測試**是[b]針對介面實現的過程[/b]來寫的,而不是[b]針對介面的功能[/b],所以測試**可能會很脆弱,實現過程稍作變化測試**也可能要做修改
所以,最根本的問題也就是單元測試是應該針對介面實現的過程還是介面的功能?
junit測試的問題
今天使用junit進行單元測試的時候,出現這樣乙個問題 1.使用 runwith標籤,不報錯,但測試方法無法執行。2.不使用 runwith標籤,測試方法可以執行,但是無法使用 contextconfiguration來讀取配置檔案。在多次測試後發現,是我引入了junit4.jar和spring t...
Junit測試中多執行緒問題
這兩天使用junit測試,測試 中為了模擬實際場景開啟多執行緒,有的情況下,測試的功能本身就是多執行緒活動。測試半天沒有達到預想的效果,仔細研究發現 junit主線程執行完畢就結束了,不管後台執行緒。場景一 如果測試 中有多執行緒,可使用countdownlatc解決。private int i 3...
陣列的粒度問題
在c中,在幾乎所有使用陣列的表示式中,陣列名的值是個指標常量,也就是陣列第乙個元素的位址。它的型別取決於陣列元素的型別 如果它們是int型別,那麼陣列名的型別就是 指向int的常量指標 在以下兩種場合下,陣列名並不是用指標常量來表示,就是當陣列名作為sizeof操作符和單目操作符 的運算元時。siz...