zoukankan      html  css  js  c++  java
  • 个人项目----词频统计----单元测试

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

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

  • 相关阅读:
    【BZOJ1452】【JSOI2009】count
    【BZOJ1030】【JSOI2007】文本生成器
    【BZOJ2427】【HAOI2010】软件安装
    从【BZOJ4173】谈做题技巧
    小A的旅行(绿豆蛙的归宿)【期望DP】
    甜点 【多重背包】
    洛谷 [P1154] 奶牛分厩
    POJ [P2631] Roads in the North
    洛谷 [P3258] 松鼠的新家
    洛谷 [P3398] 仓鼠找sugar
  • 原文地址:https://www.cnblogs.com/YangXiaomoo/p/5958750.html
Copyright © 2011-2022 走看看