software_testing_work2_question1(改)_edition

由于上个版本问题多多,而且测试情况略有呵呵,于是想想还是默默的改进了一个版本。

  • input类

首先呢,是作为输入项的实体类input。

对比之前的版本,新版本(姑且称其为edition2)加强了operation对input中属性的依赖。

同时,算是理清了operation类中的思路(至少个人感觉是比上一个版本更容易看懂),尤其是在对参数的操作和处理方面。

 1 package com.Phantom;
 2 
 3 import java.util.ArrayList;
 4 import java.util.HashMap;
 5 import java.util.List;
 6 import java.util.Map;
 7 import java.util.Map.Entry;
 8 
 9 public class inputs {
10     public int times;
11     public String words;
12     EntryComparator eCompara=new EntryComparator();
13     Map<String, Integer>map=new HashMap<String, Integer>();
14     List<Entry<String, Integer>>list=new ArrayList<Map.Entry<String,Integer>>();
15 
16     public int getTimes() {
17         return times;
18     }
19 
20     public String getWords() {
21         return words;
22     }
23 
24     public void setWords(String words) {
25         this.words = words;
26     }
27 
28     public inputs() {
29     }
30 }

 

  • operation类

    operation类中优化了功能,主要解决了以下几个问题:

    1. 当只输入空格、tab或者什么都不输直接在控制台回车被识别为单词的情况
    2. 当首字符输入空格、tab的被识别单词的情况
    3. 在输入字符串过程中单词间输入多个空格的情况
    4. 单词输入间输入tab导致相邻单词通过tab链接作为一个单词识别的情况
    5. ......(可能还有其他的,不过都是对于tab、空格之类的问题)
 1 package com.Phantom;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Collections;
 5 import java.util.Comparator;
 6 import java.util.List;
 7 import java.util.Map.Entry;
 8 import java.util.Scanner;
 9 import java.util.Set;
10 
11 
12 public  class operation {
13     inputs i=new inputs();
14     public String entery(String word){
15         //Scanner in=new Scanner(System.in);
16         //i.setWords(words);
17         i.setWords(word);
18         /*(1)
19          * .trim删除输入时句首和句尾空格
20          * 但是无法处理只输入空格、tab或者什么都不输入的情况
21          * (当只输入空格或者tab时将其转换为什么都不输入情况处理)
22          * */
23         //String[] items = i.words.trim().split("\s+|[ ]");//(1)
24         String[] items=word.trim().split("\s+|[ ]");
25         
26         for(String s:items){
27             if(i.map.containsKey(s)){
28                 i.map.put(s, i.map.get(s)+1);
29             }
30             else{
31                 i.map.put(s, 1);
32             }
33         }
34         for(Entry<String, Integer>entry:i.map.entrySet()){
35             /*(2)
36              * 用于处理(1)中无法处理的情况
37              * 由于(1)的转换将只输入空格或者tab转换为什么都不输入(即控制台下直接回车)的情况,判断键值对是否为空
38              * */
39             if(entry.getKey().isEmpty()){//(2)
40                 System.out.println("什么单词都没有输入");
41                 break;
42             }
43             else{
44                 i.list.add(entry);
45             }
46         }
47         Collections.sort(i.list, i.eCompara);
48         /*(3)
49          * 输出(1)(2)情况时的处理结果
50          * */
51         if(i.list.isEmpty()){//(3)
52             System.out.println("null"+"		"+"null");
53         }
54         System.out.println("单词"+"		"+"频率");
55         for (Entry<String, Integer> obj : i.list) {
56             i.times=obj.getValue();
57             System.out.println(obj.getKey() + "		" + i.getTimes());
58             
59         }
60         i.list.clear();
61         i.map.clear();
62         return null;
63     }
64 
65 }
  • EntryComparator类

    好吧,这个排序的倒是没怎么动,主要就是把声明集成到input类里面去了。

 1 /**
 2  * 
 3  */
 4 package com.Phantom;
 5 
 6 import java.util.Comparator;
 7 import java.util.Map.Entry;
 8 
 9 class EntryComparator implements Comparator<Entry<String, Integer>> {
10 
11     public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
12         return o1.getValue() > o2.getValue() ? -1 : 0;
13     }
14 
15 }

 

  • 测试类TestingOperation

    这个版本最大的改动就是测试类了,在放弃了断言之后,整个项目的覆盖率终于到达了可喜可贺的100%

  1 package com.Phantom;
  2 
  3 import static org.junit.Assert.*;
  4 
  5 import java.util.Collections;
  6 
  7 import junit.framework.TestCase;
  8 
  9 import org.junit.After;
 10 import org.junit.Before;
 11 import org.junit.Test;
 12 
 13 public class TestingOperation  extends TestCase{
 14     private operation o1;
 15     private inputs i1;
 16 
 17     @Before
 18     public void setUp() throws Exception {
 19          o1=new operation();
 20          i1=new inputs();
 21     }
 22     @After
 23     protected void tearDown() throws Exception {
 24         // TODO Auto-generated method stub
 25         super.tearDown();
 26     }
 27      @Test
 28     public void testOperation() {
 29          
 30          /*
 31           * 只输入空格
 32           * */
 33          System.out.println("只输入空格>>>");
 34          i1.setWords(" ");
 35          o1.entery(i1.getWords());
 36          System.out.println("
"+"输入为:"+i1.getWords());
 37          System.out.println("--------------------------------------------");
 38          
 39          /*
 40           * 只输入tab
 41           * */
 42          System.out.println("只输入tab>>>");
 43          i1.setWords("    ");
 44          o1.entery(i1.getWords());
 45          System.out.println("
"+"输入为:"+i1.getWords());
 46          System.out.println("--------------------------------------------");
 47          
 48          /*
 49           * 什么都不输入(控制台下直接回车)
 50           * */
 51          System.out.println("什么都不输入(控制台下直接回车)>>>");
 52          i1.setWords("");
 53          o1.entery(i1.getWords());
 54          System.out.println(i1.getWords());
 55          System.out.println("
"+"输入为:"+i1.getWords());
 56          System.out.println("--------------------------------------------");
 57 
 58          /*
 59           * 开头为空格
 60           * */
 61          System.out.println("开头为空格>>>");
 62          i1.setWords(" a a a s s d");
 63          o1.entery(i1.getWords());
 64          System.out.println("
"+"输入为:"+i1.getWords());
 65          System.out.println("--------------------------------------------");
 66          
 67          /*
 68           * 开头为tab
 69           * */
 70          System.out.println("开头为tab>>>");
 71          i1.setWords("    a a a s s d");
 72          o1.entery(i1.getWords());
 73          System.out.println("
"+"输入为:"+i1.getWords());
 74          System.out.println("--------------------------------------------");
 75          
 76          /*
 77           * 中间多空格
 78           * */
 79          System.out.println("中间多空格>>>");
 80          i1.setWords("a a       a     s     s  d");
 81          o1.entery(i1.getWords());
 82          System.out.println("
"+"输入为:"+i1.getWords());
 83          System.out.println("--------------------------------------------");
 84          
 85          /*
 86           * 中间tab
 87           * */
 88          System.out.println("中间多tab>>>");
 89          i1.setWords("a         a     a s     s d");
 90          o1.entery(i1.getWords());
 91          System.out.println("
"+"输入为:"+i1.getWords());
 92          System.out.println("--------------------------------------------");
 93          
 94          /*
 95           * 末尾多空格
 96           * */
 97          System.out.println("末尾多空格>>>");
 98          i1.setWords("a a a s s d                 ");
 99          o1.entery(i1.getWords());
100          System.out.println("
"+"输入为:"+i1.getWords());
101          System.out.println("--------------------------------------------");
102          
103          /*
104           * 末尾多tab
105           * */
106          System.out.println("末尾多tab>>>");
107          i1.setWords("a a a s s d            ");
108          o1.entery(i1.getWords());
109          System.out.println("
"+"输入为:"+i1.getWords());
110          System.out.println("--------------------------------------------");
111          
112          /*
113           * 混合
114           * */
115          System.out.println("混合>>>");
116          i1.setWords("              a         a    a    s s d         ");
117          o1.entery(i1.getWords());
118          System.out.println("
"+"输入为:"+i1.getWords());
119          System.out.println("--------------------------------------------");
120          
121          /*
122           * 正常
123           * */
124          System.out.println("正常>>>");
125          i1.setWords("a a a s s d");
126          o1.entery(i1.getWords());
127          System.out.println("
"+"输入为:"+i1.getWords());
128          System.out.println("--------------------------------------------");
129          
130          /*
131           * 正常
132           * */
133          System.out.println("正常>>>");
134          i1.setWords("a s s s d");
135          o1.entery(i1.getWords());
136          System.out.println("
"+"输入为:"+i1.getWords());
137          System.out.println("--------------------------------------------");
138          
139      }
140 }

 

junit

 

运行结果

覆盖率(改变测试方法后终于达到可喜可贺的100%了啊哈哈)

---------------------------------------------------------------------------------------

---------------------------------------The-End---------------------------------------

---------------------------------------------------------------------------------------

 

原文地址:https://www.cnblogs.com/Phantom-void/p/5348444.html