个人项目----词频统计----单元测试

经历了很多磨难算终于整出来一个成功的测试用例了,废话不多说。

我用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

 

posted @ 2016-10-14 10:50  YangXiaomoo  阅读(425)  评论(3编辑  收藏  举报