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类中优化了功能,主要解决了以下几个问题:
- 当只输入空格、tab或者什么都不输直接在控制台回车被识别为单词的情况
- 当首字符输入空格、tab的被识别单词的情况
- 在输入字符串过程中单词间输入多个空格的情况
- 单词输入间输入tab导致相邻单词通过tab链接作为一个单词识别的情况
- ......(可能还有其他的,不过都是对于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

运行结果




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

---------------------------------------------------------------------------------------
---------------------------------------The-End---------------------------------------
---------------------------------------------------------------------------------------
software_testing_work2_question1(改)_edition的更多相关文章
- 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...
- Linux.NET实战手记—自己动手改泥鳅(上)
各位读者大家好,不知各位读者有否阅读在下的前一个系列<Linux.NET 学习手记>,在前一个系列中,我们从Linux中Mono的编译安装开始,到Jexus服务器的介绍,以及如何在Linu ...
- Linux.NET实战手记—自己动手改泥鳅(下)
在上回合中,我们不痛不痒的把小泥鳅的数据库从只能供在Windows下运行的Access数据库改为支持跨平台的MYSQL数据库,毫无营养的修改,本回合中,我们将把我们修改后得来的项目往Linux中部署. ...
- Android 打开方式选定后默认了改不回来?解决方法(三星s7为例)
Android 打开方式选定后默认了改不回来?解决方法(三星s7为例) 刚刚在测试东西,打开一个gif图,然后我故意选择用支付宝打开,然后...支付宝当然不支持,我觉得第二次打开它应该还会问我,没想到 ...
- 把PDF的底色改成护眼色,这样读起文章来就不是很累了······
PDF格式背景改变方法如下: 打开PDF 点击 编辑 ->首选项->辅助工具->选中"替换文档颜色"和" 自定义颜色"->将背景颜色改成 ...
- 3.EF 6.0 Code-First实现增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-entity-framework-5-0-code- ...
- 4.在MVC中使用仓储模式进行增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-using-the-repository-pattern-in-mvc/ 系列目录: ...
- 5.在MVC中使用泛型仓储模式和工作单元来进行增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...
- EF里单个实体的增查改删以及主从表关联数据的各种增删 改查
本文目录 EF对单个实体的增查改删 增加单个实体 查询单个实体 修改单个实体 删除单个实体 EF里主从表关联数据的各种增删改查 增加(增加从表数据.增加主从表数据) 查询(根据主表找从表数据.根据从表 ...
随机推荐
- WinForm 窗体基本属性、公共控件
一.WinForm:客户端程序制作 - C/S (B/S:服务器端) 它是基于.NET Framework框架上运行,不是必须在windows系统上才能运行---------------------- ...
- HTML 表格<table><caption><th><tr><td><thead><tbody><tfoot><col><colgroup>
<table>标签: 定义和用法: <table>标签定义HTML表格. 简单的HTML表格由table元素以及一个或多个tr.th或td元素组成. tr元素定义表格行,th元 ...
- SEO基础问题:1. 关于网站的三要素你知道多少?
800x600 Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 /* Style ...
- AndroidTouch事件总结
1.自定义的控件几乎都要用到触摸事件,不交互怎么响应,相关的事件处理函数由dispatchTouchEvent.onInterceptTouchEvent.onTouchEvent,处理这些事件的由v ...
- Java设计模式 工厂模式概念解析
定义:工厂模式专门负责将大量有共同接口的类实例化.工厂模式可以动态决定将哪一个类实例化,而不必事先知道每次要实例化哪一个类. 三种形态: 简单工厂模式:又称静态工厂方法 工厂方法模式:又称多态性工厂模 ...
- jquery为什么提倡使用.on绑定,.off移除组合代替.live和.die组合呢?
.live绑定的是固定的Document的节点,在树形节点中,如果节点较多,层级查询影响效率: .on绑定的是$(selector),可自由改变嵌套层级问题,效率高: 列举两种on可以绑定多个事件的方 ...
- WebPack 简明学习教程
WebPack 简明学习教程 字数1291 阅读22812 评论11 喜欢35 WebPack是什么 一个打包工具 一个模块加载工具 各种资源都可以当成模块来处理 网站 http://webpack. ...
- Makefile 一点一滴(二)—— 输出文件到指定路径
先来看最简单的 makefile 文件: TestCpp : TestCpp.o g++ -o TestCpp TestCpp.o TestCpp.o : TestCpp.cpp g++ -c Tes ...
- Parse xml/json[xpath/jpath]
import groovy.util.XmlSlurper import groovy.util.XmlParser import com.eviware.soapui.support.GroovyU ...
- sql返回两个日期之间的日期_函数实现
-- Description:返回两段日期之间的所有日期 <Description,,>-- ============================================ ...