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里主从表关联数据的各种增删改查 增加(增加从表数据.增加主从表数据) 查询(根据主表找从表数据.根据从表 ...
随机推荐
- 使用Axis2建立WebService
Axis是apache重量级的WebService框架,虽然相比Xfire和CXF而言相对比较臃肿,但是企业中最常用的就是Axis,Axis2是Axis的升级版: 建立一个最简单的Axis2 W ...
- 使用R进行地图相关的可视化
Here is a solution using the geosphere and maps package. Using the gcIntermediate function you can & ...
- Sql语句复习
1.两张表A,B 其中A表中字段1,字段2,字段3要迁移到B表中字段4,字段5,字段6,迁移后B表的字段7 全赋值为123: insert into B(字段4,字段5,字段6,字段7) select ...
- C#/ASP.NET MVC微信公众号接口开发之从零开发(四) 微信自定义菜单(附源码)
C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发( ...
- 高性能Web服务器Nginx的配置与部署研究系列(1)-- 入门 hello work
简介: Nginx 是一个基于 BSD-like 协议.开源.高性能.轻量级的HTTP服务器.反向代理服务器以及电子邮件(SMTP.POP3.IMAP)服务器.Nginx 是由一个俄罗斯的名叫“Igo ...
- 【图像处理】【SEED-VPM】5.uImage的烧写 & NFS烧写文件系统
基于 TFTP 烧写 uImage 当用户对 SEED-VPM6467 下的内核驱动源码进行调整或者添加新的设备驱动后,需要对内核进行重新编译配置,编译生成内核镜像后,可以通过 tftp 下载到 SE ...
- POJ 2229 Sumsets
Sumsets Time Limit: 2000MS Memory Limit: 200000K Total Submissions: 11892 Accepted: 4782 Descrip ...
- Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) E. Goods transportation (非官方贪心解法)
题目链接:http://codeforces.com/contest/724/problem/E 题目大意: 有n个城市,每个城市有pi件商品,最多能出售si件商品,对于任意一队城市i,j,其中i&l ...
- ROS笔记——创建简单的主题发布节点和主题订阅节点
在安装好ROS后,接着学习如何创建节点和节点之间的通信方式,以一个简单的主题发布节点和主题订阅节点说明. 节点是连接ROS网络等可执行文件,是实现某些功能的软件包,也是一个主要计算执行的进程. 一.创 ...
- linux操作命令
cd / 回到跟目录 cd .. 返回上一层目录 tomcat 的logs目录执行tail -f catalina.out查看日志 ps -ef|grep tomcat 查看tomcat进程 kil ...