单元测试

尤少辉 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);
}

结果:

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);
}

结果

(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” 又怎么处理呢?
f..测试代码覆盖率
使用EclEmma

 c. 小结与感受:就是定义的属性还是其他的一些类名不要随便定义,不然出错是很难受,还有要定义一些新的属性出现错误时也是很麻烦的,本次实验还是做的不是很好,最要是:有些涉及到页面和Servlet之间的相关变量和调整我没有测试,虽然尝试过了,但是找的资料好像有问题,连资料里面的都不能运行,导致那个没有测试,只测试了主要方法。
d. 在隔了一周之后再看之前的代码,是否更能体会到下面这些东西
(1) 良好的设计:总感觉我们设计的不怎么样。
(2) 编码规范:把一些主要方法提取出来后,使得代码的数量得以减少,也使得代码看起来跟加清晰。
(3) 必要的注释:添加了必要的注释后,使得看世豪的代码不至于像以前一样那么久和难受。
f.psp

g.照片

 

h.总结:

这次由于角色互换导致了,世豪在对代码中的方法提取出来后,由于属性有些定义的随意导致了,那时候世豪弄代码时,有点晕。还有就是涉及到http的就会我们试过,但是测试不了,所以有些涉及到了http的都把方法提取出来,虽然美中不足,但还算是勉强可以吧。

原文地址:https://www.cnblogs.com/ysh09-04/p/6625407.html