个人项目----词频统计----单元测试
经历了很多磨难算终于整出来一个成功的测试用例了,废话不多说。
我用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