软件质量保证与测试技术实验报告(四)——JUnit单元测试

1.实验名称——JUnit单元测试

2.实验目的

(1)利用Junit进行单元测试,理解单元测试的任务、同时理解这类测试工具的实现原理;

(2)理解断言的基本概念和断言测试方法;

3.实验内容

题目1:完成课件中Score_List的单元测试。

题目2:这是一个简单的计算器类——Computer,能够实现两个整数的加、减、乘、除运算(具体代码见附录C),请利用Junit进行单元测试。

4.实验过程

题目1:完成课件中Score_List的单元测试:从分数表中查找最大值。

Score_List.java

package Score;
public class Score_List { public static int maximum(int[] list) { int index;
    int max = Integer.MIN_VALUE;
    if(list.length == 0)
      { throw new RuntimeException("空表");
      }
    for(index = 0; index<=list.length-1; index++)   
      { if(list[index]>max) max = list[index];
      }
      return max;
  }
}

Score_ListTest.java

package Score;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class Score_ListTest extends TestCase 
{ public Score_ListTest(String testName)
    { super(testName);
    }
    
    //测试表中有3个分数
    public void testOne() 
    { int[] list = new int[3];
         list[0] = 7;
         list[1] = 9;
         list[2] = 8;
         int expResult = 9;
         int result = Score_List.maximum(list);
         assertEquals(expResult, result);
    }
    
    //测试表中有1个分数
    public void testTwo() 
    { int[] list = new int[1];
        list[0] = 9;        
        int expResult = 9;
        int result = Score_List.maximum(list);
        assertEquals(expResult, result);
     }
    
    //测试表为空的情况
    public void testThree() 
    { try{ Score_List.maximum(new int[] {});
        fail("这里应抛出而没有抛出异常");
        }
        catch(RuntimeException e){ assertTrue(true);
        }
    }
    public static  TestSuite suite()
    { TestSuite suite=new TestSuite();
     suite.addTest(new Score_ListTest("testOne"));
     suite.addTest(new Score_ListTest("testTwo"));
     suite.addTest(new Score_ListTest("testThree"));  
     return suite;
    }
  }

运行截图:

题目2:这是一个简单的计算器类——Computer,能够实现两个整数的加、减、乘、除运算(具体代码见附录C),请利用Junit进行单元测试。

Computer.java

package test;
public class Computer { private int a;
  private int b;
  public Computer(int x,int y)
  { a=x;
    b=y;
  }
  public int add(){return a+b;}
  public int minus(){return a-b;}
  public int multiply(){return a*b;}
  public int divide()
  { if(b!=0) return a/b;
    else return 0;
  }
}

ComputerTest.java

package test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class ComputerTest extends TestCase
{ Computer a;
  public ComputerTest(String testName)
    { super(testName);
    }
  protected void setup()
  { a=new Computer(1,2);
  }
  public void testAdd() 
    { setup();
         int expResult = 3;
         int result = a.add();
         assertEquals(expResult, result);
    }
  public void testMinus() 
    { setup();
     int expResult = -1;
         int result = a.minus();
         assertEquals(expResult, result);
    }
  public void testMultiply() 
    { setup();
         int expResult = 2;
         int result = a.multiply();
         assertEquals(expResult, result);
    }
  public void testDivide() 
    { setup();
         int expResult = 0;
         int result = a.divide();
         assertEquals(expResult, result);
    }
  public static TestSuite suite()
    { TestSuite suite=new TestSuite();
     suite.addTest(new ComputerTest("testAdd"));
     suite.addTest(new ComputerTest("testMinus")); 
     suite.addTest(new ComputerTest("testMultiply")); 
     suite.addTest(new ComputerTest("testDivide")); 
     return suite;
    }
}

5.实验心得

通过本次实验,我学会了利用Junit进行单元测试,理解了单元测试的任务和这类测试工具的实现原理,并且理解了断言的基本概念和断言测试方法。

附录:Computer类源代码

public class Computer
{private int a;
private int b;
public Computer(int x,int y)
{ a=x;
 b=y;
}
public int add()
{ return a+b;
}
public int minus()
{ return a-b;
}
public int multiply()
{ return a*b;
}
public int divide()
{ if(b!=0)
     return a/b;
   else 
     return 0;
}
}