• 单元测试


    尤少辉 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的都把方法提取出来,虽然美中不足,但还算是勉强可以吧。

  • 相关阅读:
    爬取拉勾部分求职信息+Bootstrap页面显示
    一名IT的术后
    CodeFirst-Section1之小例子
    简简单单C#爬虫小计
    分页:T-SQL存储过程和EF存储过程的使用
    利用jQuery获取数据,JSONP
    更新数据库忘记加条件
    redis学习笔记(九): replication
    redis学习笔记(八): multi
    redis学习笔记(七): pubsub
  • 原文地址:https://www.cnblogs.com/ysh09-04/p/6625407.html
Copyright © 2020-2023  润新知