經歷了很多磨難算終於整出來一個成功的測試用例了,廢話不多說。
我用java編寫詞頻統計,所以使用了junit4。本次學習單元測試是對已有的程式編寫測試用例,原有的程式方法如下。
1 public ArrayList<Map.Entry<String,Integer>> SortMap(Map<String,Integer> oldmap){ 2 3 ArrayList<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(oldmap.entrySet()); 4 5 Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){ //降序 6 @Override 7 public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { 8 return o2.getValue().compareTo(o1.getValue()); 9 } 10 }); 11 12 return list; 13 }
部分測試用例程式碼
編寫一個亂序的Map,將其輸入進SortMap方法,Integer表示詞頻,本應該是亂序,但為了簡便給每個String搭配了一個遞增的數字。
1 Map<String,Integer> testmap = new TreeMap<String,Integer>(); 2 String[] wordlist = {"English","is","very","useful"}; 3 4 for(int i = 0;i < 4;i++){ 5 testmap.put(wordlist[i], i); 6 }
把建立的Map放入ArrayList中,這裡要特殊說明一下,Map存入<String,Integer>的搭配時並不像list那樣順序儲存。所以對儲存後的list進行了排序。這就得到在單元測試裡我所期待的結果。
1 ArrayList<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(testmap.entrySet()); 2 for(int i=0;i<list.size();i++){ 3 for(int j=i+1;j<list.size();j++){ 4 if(list.get(i).getValue()<list.get(j).getValue()){ 5 Map.Entry<String,Integer> swap = list.get(i); 6 list.set(i, list.get(j)); 7 list.set(j, swap); 8 } 9 } 10 }
最後對把期望值和實際值進行對比。
1 assertEquals(list,wc.SortMap(testmap));
結果顯示
使用單元測試感受
剛開始在找單元測試的資料時,一直不瞭解這是個什麼東西,能幹什麼用,可是在有了一定的瞭解之後發現單元測試是一個測試,程式設計師需要用它來對程式碼進行測試。於是,很自然就會想到,幹嘛非得要用這個東西做什麼測試呢。但在接下來的學習過程中就推翻了我之前的想法,並使我能理解和感受到單元測試所帶來的好處。
由於我在編寫好程式後使用juint4測試的,所以這個過程是與實際開發的過程相反的。所以出現了原有程式能跑,但測試用例卻跑不了的情況。這樣的現象帶給了我兩點好處。第一:我明白了在以後的程式設計過程中可以使用單元測試這個工具,先把目標設定好,再去編寫程式,這樣能夠很方便檢測到問題的來源,更直接的清楚我所編寫的程式碼能不能實現所要求的功能,例如這次編寫的測試用例,雖然測試程式碼比原方法還要長,但這個過程卻保證了我編寫了一個有效而且高效的方法。也就是在未完成方法,但明確功能的情況下,通過這個方法能夠清晰的知道自己的完成進度。在編寫一些複雜的方法時,利用這個工具一定能夠事半功倍。第二:我明白了Map在儲存<String,Integer>對的時候是亂序儲存的。在第一次編寫測試用例時,只是將Map中的<String,Integer>簡單的存入ArrayList中,結果測試用例沒有通過。在弄懂Map的儲存機制是將<String,Integer>儲存成一個entry物件後,將ArrayList的entry物件一value值進行排序,得到測試用例想要的期望的降序ArrayList。
單元測試PSP
日期 | 型別 | 任務 | 開始時間 | 結束時間 | 被打斷時間 | 計劃(min) | 實際(min) |
2016.10.12 | 文獻學習 | 查詢資料、學習 | 22:15 | 23:09 | 4 | 30 | 50 |
2016.10.13 | 編碼學習 | 編寫測試用例 | 14:02 | 15:41 | 5 | 40 | 94 |
編寫測試用例,修改錯誤 | 21:19 | 22:50 | 12 | 30 | 79 | ||
總結 | 寫部落格 | 23:24 | 23:55 | 7 | 20 | 14 | |
2016.10.14 | 總結 | 接著寫部落格 | 09:53 | 10:42 | 2 | 20 | 49 |
HPPT:https://git.coding.net/YangXiaomoo/wordCountNO.1.git
SSH:git@git.coding.net:YangXiaomoo/wordCountNO.1.git
GIT:git://git.coding.net/YangXiaomoo/wordCountNO.1.git
最後感謝此博主對junit的詳細講解
http://blog.csdn.net/chenleixing/article/details/44260359