Fork me on GitHub

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 {

    
    
}

 

posted @ 2015-04-22 01:00  森林森  阅读(867)  评论(1编辑  收藏  举报