你的位置:首页 > Java教程

[Java教程]Java从零开始学四十六(Junit)


一、软件测试

软件开发:

项目调研--需求分析--软件设计--程序编码--软件测试--运行维护

软件测试:利用测试工具按照测试方案和流程对产品进行功能和性能测试,使用人工或者自动手段来运行或测试某个系统的过程。目的在于检验是否满足规定的需求,确认预期结果与实际结果之间的差别。

墨盒测试-白盒测试-回归测试-单元测试

二、JUnit-单元测试工具

三、测试Junit测试类

创建被测试类

package com.pb.junit;/** *1.创建被测试类 *2.Junit 3.0或者4.0 这里有3.0 *3.创建测试类 *简单实现加,减,乖,除的计算器 */public class Calculator {  //运算结果  private static int result;    //加法  public void add(int n){    result+=n;  }  //减法    public void minus(int n){      result-=n;    }    //乖法    public void mult(int n){      //result*=n;    }    //除法    public void div(int n){      if(n==0){        System.out.println("除数不能为0!");      }else{        result/=n;      }    }    //开方 :死循环    public void sqr(){      for(;;){              }    }        //平方    public void square(int n){      result=n*n;          }    //清零运算结果    public void clear(){      result=0;    }            public int getResult() {      return result;    }    public void setResult(int result) {      Calculator.result = result;    }    }

使用JUnit3测试

package com.pb.junit;import junit.framework.Assert;import junit.framework.TestCase;public class CalculatorTest extends TestCase {  //创建测试类对象  Calculator calculator=new Calculator();  //测试启动前运行的方法  protected void setUp() throws Exception {    super.setUp();    calculator.clear();    System.out.println("测试前");  }  //测试结束后运行的方法  protected void tearDown() throws Exception {    super.tearDown();    System.out.println("测试后");  }  //JUnit3中测试方法必须以test开头  public void testAdd() {    calculator.add(2);    calculator.add(3); //2+3结果为5        int result=calculator.getResult();    Assert.assertEquals(5, result);  }  public void testMinus() {    calculator.minus(1);    calculator.minus(5);//期望结果为-6    int result=calculator.getResult();    Assert.assertEquals(-6, result);  }  public void testMult() {    calculator.mult(3);    calculator.mult(4);    int result=calculator.getResult();    Assert.assertEquals(12, result);  }  public void testDiv() {    calculator.div(8);    calculator.div(0);    int result=calculator.getResult();    Assert.assertEquals(4 ,result);  }  }

使用JUnit4

 

 

package com.pb.junit;import static org.junit.Assert.*;import org.junit.After;import org.junit.AfterClass;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Ignore;import org.junit.Test;public class CalculatorTest {  Calculator calculator=new Calculator();  @BeforeClass  public static void setUpBeforeClass() throws Exception {    System.out.println("============所有测试之前执行一次");  }  @AfterClass  public static void tearDownAfterClass() throws Exception {    System.out.println("所有测试之后执行一次==========");  }  @Before  public void setUp() throws Exception {    System.out.println("==========每个测试之前执行一次");    calculator.clear();  }  @After  public void tearDown() throws Exception {    System.out.println("每个测试之后执行一次=============");  }  //@Test 是必须的,测试方法可以不用以test开头,必须为public ,没有返回必须为void  @Test  public void testAdd() {    calculator.add(3);    calculator.add(2);    int result = calculator.getResult();    assertEquals(5, result);  }  //忽略这个测试方法  @Ignore  @Test  public void testMinus() {    fail("Not yet implemented");  }      @Test  public void testMult() {    fail("Not yet implemented");  }  //抛出预定义的异常  @Test(expected=ArithmeticException.class)  public void testDiv() throws ArithmeticException {    calculator.add(8);    calculator.div(0);    int result=calculator.getResult();    assertEquals(0, result);  }  @Test(timeout=5000) //超过5秒,算测试失败  public void testSqr() {    calculator.sqr();    fail("Not yet implemented");  }  @Test  public void testSquare() {    fail("Not yet implemented");  }}

测试套件

package com.pb.junit;import org.junit.runner.RunWith;import org.junit.runners.Suite;import org.junit.runners.Suite.SuiteClasses;@RunWith(Suite.class)@SuiteClasses({  //测试用例类的名称  Calculator1Test.class,  Calculator2Test.class,  CalculatorTest.class  })public class TotalTest {    }