单元测试
尤少辉 201421123050 洪世豪 201421123051
coding.net:https://git.coding.net/ysh0904/web-ceshi.git
a.兴趣分析:
1.通过单元测试代码,测试加法是否能正确工作; 2.通过单元测试代码,测试加减乘除功能。 3.通过单元测试代码,测试计算类对于各种参数的支持: a. 输入是有错误的,例如 “1 ++ 2”, b. 在数值范围是 -1000 .. 1000 的时候,传进去 “10000 + 32768”, c. 或者是 “ 248 / 0” 怎么办? d. 怎么告诉函数的调用者 “你错了”? 把返回的字符串定义为 “-1” 来表示? e. 那么如果真的计算结果是 “-1” 又怎么处理呢?
b. 设计测试框架, 模拟测试数据:
(1) 请给出计算模块的测试用例及运行结果
1.运算和对除法的处理方式
public void jsuan(int s,String d1,int s1,String d2,int s2, String d3,int s3){
a1=s;
a2=s1;
a3=s2;
a4=s3;
l=s+d1+s1+d2+s2+d3+s3;
jshi(d1, d2, d3);//由于真分数的计算对于下面的计算会出现错误使用,重新调用
Object re=null;
try {
re=engine.eval(l);//运算方法
} catch (ScriptException e) {
e.printStackTrace();
}
System.out.println(l);
System.out.println("结果为"+re);
}
//除法的处理方式
public String jshi(String l1,String l2,String l3){
if(l1.equals("/")&&l3.equals("/")){
if(l2.equals("+")||l2.equals("-")){
l="("+a1+"*"+a4+"+"+a2+"*"+a3+")"+"/"+"("+a3+"*"+a4+")"+"";
}else if(l2.equals("*")){
l="("+a1+"*"+a3+")"+"/"+"("+a2+"*"+a4+")"+"";
}else{
l=a1+"/"+"("+a2+"*"+a3+"*"+a4+")"+"";
}
}
if(l1.equals("/")&&!l3.equals("/")){
if(l2.equals("*")&&l3.equals("+")){
l=a1+"*"+a3+"/"+a2+l3+a4;
}if(l2.equals("*")&&l3.equals("-")){
l="("+a1+l2+a3+l3+a4+l2+a2+")"+l1+a2;
}
if(l2.equals("/")&&l3.equals("*")){
l=a1+l3+a4+l2+"("+a2+"*"+a3+")";
}if(l2.equals("/")&&l3.equals("+")){
l=a1+l1+"("+a2+"*"+a3+")"+l3+a4;
}if(l2.equals("/")&&l3.equals("-")){
l="("+a1+l3+a4+"*"+a2+"*"+a3+")"+l1+"("+a2+"*"+a3+")";
}if(l2.equals("-")&&l3.equals("*")){
l="("+a1+l2+"("+a3+l3+a4+")"+"*"+a2+")"+l1+a2;
}
}
if(l2.equals("/")){
if(l1.equals("-")&&l3.equals("*")){
l="("+a1+l3+a3+l1+a2+l3+a4+")"+l2+a3;
}if(l1.equals("-")&&l3.equals("/")){
l="("+a1+"*"+a3+"*"+a4+l1+a2+")"+l2+a3+"*"+a4;
}if(l1.equals("-")&&l3.equals("+")){
l="("+a1+"*"+a3+l1+a2+")"+l2+a3+l3+a4;
}if(l1.equals("-")&&l3.equals("-")){
l="("+"("+a1+l3+a4+")"+"*"+a3+l1+a2+")"+l2+a3;
}if(l1.equals("*")&&l3.equals("-")){
l="("+a1+l1+a2+l3+a3+l1+a4+")"+l2+a3;
}if(l1.equals("/")&&l3.equals("-")){
l="("+a1+l3+a2+"*"+a3+"*"+a4+")"+l2+"("+a2+"*"+a3+")";
}if(l1.equals("+")&&l3.equals("-")){
l="("+"("+a1+l3+a4+")"+"*"+a3+l1+a2+")"+l2+a3;
}
}
if(l3.equals("/")){
if(l1.equals("-")&&l2.equals("*")){
l="("+a1+l2+a4+l1+a2+l2+a4+")"+l3+a4;
}if(l1.equals("-")&&l2.equals("-")){
l="("+a1+"*"+a4+l1+a2+"*"+a4+")"+l3+a4;
}if(l1.equals("-")&&l2.equals("+")){
l="("+a1+"*"+a4+l1+a2+"*"+a4+")"+l3+a4;
}if(l1.equals("*")&&l2.equals("-")){
l="("+a1+l1+a2+l1+a4+l2+a3+")"+l3+a4;
}
}
return l;
}
//测试模块
@Test
public void testJshi() {
servlet b=new servlet();
b.jsuan(1,"-",5,"/",5,"-",2);
}
结果:
public void timu1(int f){
l="";
String s = null;
for(int i=0;i<3;i++){
if(f==1){
int k=1+(int)(Math.random()*9);
if(i==0){
a1=k;
}else if(i==1){
a2=k;
}else{
a3=k;
}
l=l+k;
}if(f==2){
int k1=1+(int)(Math.random()*9);
int k2=1+(int)(Math.random()*9);
if(i==0){
a1=k1+k2;
}else if(i==1){
a2=k1+k2;
}else{
a3=k1+k2;
}
l=l+k1+k2;
}
int x=1+(int)(Math.random()*9);
if(i==0){
a1=a1+x;
}else if(i==1){
a2=a2+x;
}else{
a3=a3+x;
}
int x2=(int)(Math.random()*4);
switch(x2){
case 0:s="-";break;
case 1:s="+";break;
case 2:s="*";break;
case 3:s="/";break;
}
l=l+x+s;
if(i==0){
l1=s;
System.out.println(l1);
}else
if(i==1){
l2=s;
System.out.println(l2);
}else{
l3=s;
System.out.println(l3);
}
}if(f==1){
int k=1+(int)(Math.random()*9);
l=l+k;
}if(f==2){
int k1=1+(int)(Math.random()*9);
int k2=1+(int)(Math.random()*9);
l=l+k1+k2;
}
int x3=1+(int)(Math.random()*9);
a4=x3;
l=l+x3;
p=p+1;
System.out.println(l);
}
//测试代码
public void testTimu1() {
servlet a=new servlet();
a.timu1(0);
}
结果:
3.输入数据出现异常的处理
public void shuru(String sb){
System.out.println(sb);
Object result1 = null;
try {
esult1 = engine.eval(sb);
} catch (ScriptException e) {
System.out.println("输入有误");
System.exit(0);
}
System.out.println(result1);
try {
int s1 = (int)result1;
System.out.println(s1);
if(s1>1000||s1<-1000){
System.out.println("超出范围"+-1);
}else{
System.out.println("输入无误");
}
} catch (Exception e) {
System.out.println("除0异常"+-1);
}
}
测试模块:
@Test
public void testTimu1() {
servlet a=new servlet();
String l="128/0";
a.shuru(l);
}
结果
1
2
3
4
5
|
(2) 描述测试过程中遇到的问题以及解决的方案。 1.处理除0异常的时候会报错,因为我直接吧结果的Object类型的强制为 int 并且进行判断,由于../0不是 int 的会出现错误。 方法:把强制的 int 进行 try {} catch (){这为除0异常的处理方式}处理; 2.由于定义了很多的变量,有些变量还是全局变量,使用在 public void ...(这里面的变量如果和全局变量一致时,可能会导致结果的出错,或者异常){} 方法:就是把变量定义一个没有用到的,以防出错; |
(3) 请展示上面描述的单元测试的每个环节。
1.通过单元测试代码,测试加法是否能正确工作; 2.通过单元测试代码,测试加减乘除功能。
@Test
public void testJshi() {
servlet b=new servlet();
b.jsuan(1,"-",5,"/",5,"-",2);
}
结果:
3.通过单元测试代码,测试计算类对于各种参数的支持: a. 输入是有错误的,例如 “1 ++ 2”,
@Test
public void testTimu1() {
servlet a=new servlet();
String l="1++2";
a.shuru(l);
}
结果:
b. 在数值范围是 -1000 .. 1000 的时候,传进去 “10000 + 32768”,
@Test
public void testTimu1() {
servlet a=new servlet();
String l="100000";
a.shuru(l);
}
c. 或者是 “ 248 / 0” 怎么办?
@Test
public void testTimu1() {
servlet a=new servlet();
String l="128/0";
a.shuru(l);
}
d. 怎么告诉函数的调用者 “你错了”? 把返回的字符串定义为 “-1” 来表示?
e. 那么如果真的计算结果是 “-1” 又怎么处理呢?
使用EclEmma
d. 在隔了一周之后再看之前的代码,是否更能体会到下面这些东西
(1) 良好的设计:总感觉我们设计的不怎么样。
(2) 编码规范:把一些主要方法提取出来后,使得代码的数量得以减少,也使得代码看起来跟加清晰。
(3) 必要的注释:添加了必要的注释后,让少辉看我的代码不至于像以前一样那么久和难受。
f.psp
g.照片
h.总结:
涉及到http的测试不了,所以我将有些涉及到了http的都把方法提取出来。