software_testing_work2_question1(改)_edition

时间:2023-03-09 13:17:42
software_testing_work2_question1(改)_edition

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

  • input类

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

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

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

 package com.Phantom;

 import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry; public class inputs {
public int times;
public String words;
EntryComparator eCompara=new EntryComparator();
Map<String, Integer>map=new HashMap<String, Integer>();
List<Entry<String, Integer>>list=new ArrayList<Map.Entry<String,Integer>>(); public int getTimes() {
return times;
} public String getWords() {
return words;
} public void setWords(String words) {
this.words = words;
} public inputs() {
}
}
  • operation类

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

    1. 当只输入空格、tab或者什么都不输直接在控制台回车被识别为单词的情况
    2. 当首字符输入空格、tab的被识别单词的情况
    3. 在输入字符串过程中单词间输入多个空格的情况
    4. 单词输入间输入tab导致相邻单词通过tab链接作为一个单词识别的情况
    5. ......(可能还有其他的,不过都是对于tab、空格之类的问题)
 package com.Phantom;

 import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set; public class operation {
inputs i=new inputs();
public String entery(String word){
//Scanner in=new Scanner(System.in);
//i.setWords(words);
i.setWords(word);
/*(1)
* .trim删除输入时句首和句尾空格
* 但是无法处理只输入空格、tab或者什么都不输入的情况
* (当只输入空格或者tab时将其转换为什么都不输入情况处理)
* */
//String[] items = i.words.trim().split("\\s+|[ ]");//(1)
String[] items=word.trim().split("\\s+|[ ]"); for(String s:items){
if(i.map.containsKey(s)){
i.map.put(s, i.map.get(s)+1);
}
else{
i.map.put(s, 1);
}
}
for(Entry<String, Integer>entry:i.map.entrySet()){
/*(2)
* 用于处理(1)中无法处理的情况
* 由于(1)的转换将只输入空格或者tab转换为什么都不输入(即控制台下直接回车)的情况,判断键值对是否为空
* */
if(entry.getKey().isEmpty()){//(2)
System.out.println("什么单词都没有输入");
break;
}
else{
i.list.add(entry);
}
}
Collections.sort(i.list, i.eCompara);
/*(3)
* 输出(1)(2)情况时的处理结果
* */
if(i.list.isEmpty()){//(3)
System.out.println("null"+"\t\t"+"null");
}
System.out.println("单词"+"\t\t"+"频率");
for (Entry<String, Integer> obj : i.list) {
i.times=obj.getValue();
System.out.println(obj.getKey() + "\t\t" + i.getTimes()); }
i.list.clear();
i.map.clear();
return null;
} }
  • EntryComparator类

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

 /**
*
*/
package com.Phantom; import java.util.Comparator;
import java.util.Map.Entry; class EntryComparator implements Comparator<Entry<String, Integer>> { public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
return o1.getValue() > o2.getValue() ? -1 : 0;
} }

 

  • 测试类TestingOperation

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

 package com.Phantom;

 import static org.junit.Assert.*;

 import java.util.Collections;

 import junit.framework.TestCase;

 import org.junit.After;
import org.junit.Before;
import org.junit.Test; public class TestingOperation extends TestCase{
private operation o1;
private inputs i1; @Before
public void setUp() throws Exception {
o1=new operation();
i1=new inputs();
}
@After
protected void tearDown() throws Exception {
// TODO Auto-generated method stub
super.tearDown();
}
@Test
public void testOperation() { /*
* 只输入空格
* */
System.out.println("只输入空格>>>");
i1.setWords(" ");
o1.entery(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); /*
* 只输入tab
* */
System.out.println("只输入tab>>>");
i1.setWords(" ");
o1.entery(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); /*
* 什么都不输入(控制台下直接回车)
* */
System.out.println("什么都不输入(控制台下直接回车)>>>");
i1.setWords("");
o1.entery(i1.getWords());
System.out.println(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); /*
* 开头为空格
* */
System.out.println("开头为空格>>>");
i1.setWords(" a a a s s d");
o1.entery(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); /*
* 开头为tab
* */
System.out.println("开头为tab>>>");
i1.setWords(" a a a s s d");
o1.entery(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); /*
* 中间多空格
* */
System.out.println("中间多空格>>>");
i1.setWords("a a a s s d");
o1.entery(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); /*
* 中间tab
* */
System.out.println("中间多tab>>>");
i1.setWords("a a a s s d");
o1.entery(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); /*
* 末尾多空格
* */
System.out.println("末尾多空格>>>");
i1.setWords("a a a s s d ");
o1.entery(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); /*
* 末尾多tab
* */
System.out.println("末尾多tab>>>");
i1.setWords("a a a s s d ");
o1.entery(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); /*
* 混合
* */
System.out.println("混合>>>");
i1.setWords(" a a a s s d ");
o1.entery(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); /*
* 正常
* */
System.out.println("正常>>>");
i1.setWords("a a a s s d");
o1.entery(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); /*
* 正常
* */
System.out.println("正常>>>");
i1.setWords("a s s s d");
o1.entery(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); }
}

junit

software_testing_work2_question1(改)_edition

运行结果

software_testing_work2_question1(改)_editionsoftware_testing_work2_question1(改)_editionsoftware_testing_work2_question1(改)_editionsoftware_testing_work2_question1(改)_edition

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

software_testing_work2_question1(改)_edition

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

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

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