JUNIT3.8使用詳解

一:junit 3.8使用原則

測試類必須要繼承與TestCase父類;

測試方式需要滿足如下原則:
    1)public的

    2)void的

    3)無方法參數
    4)方法名稱必須以test開頭
Test Case之間一定要保持完全的獨立性,不允許出現任何的依賴關係。

使用Assert中的各類assert方法,在測試代碼不會執行的地方插入Assert.fail()方法
我們不能依賴於測試方法的執行順序。
測試之前是什麼狀態,測試執行完畢後就應該是什麼狀態,而不應該由於測試執行的原因導致狀態發生了變化。

二:使用Junit的最佳實踐
1) 新建一個名爲test的source folder,用於存放測試類源代碼
2) 目標類與測試類應該位於同一個包下面,這樣測試類中就不必導入源代碼所在的包,因爲他們位於同一個包下面
3) 測試類的命名規則:假如目標類是Calculator,那麼測試類應該命名爲TestCalculator或者是CalculatorTest

三:關於setUp與tearDown方法的執行順序:框架會先執行setUp,然後執行測試的方法(比如TestCase中的testAdd()),然後再執行tearDown方法。

四、執行方式:

1)使用ide比如eclipse自帶的gui運行框架,右鍵執行。

2)使用腳本調用:

 junit.textui.TestRunner.run(CalculatorTest.class);//使用控制檯執行
 junit.awtui.TestRunner.run(CalculatorTest.class);//調用junit自身的gui界面執行

五、實現案例:

待測試類Calculator:

package test;

//實現整數的加、減、乘、除

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
    
    public int subtract(int a, int b) {
        return a - b;
    }
    
    public int multiply(int a, int b) {
        return a * b;
    }
    
    public int divide(int a, int b) throws Exception {
        if(0 == b)
            throw new Exception("除數不能爲0");
        return a / b;
    }
   
}

 

待測試類DeleteAll:

package test;

import java.io.File;

//實現刪除某一個文件或者某一個目錄下的所有文件

public class DeleteAll
{
    public static void deleteAll(File file)
    {
        if(file.isFile() || file.list().length == 0)
        {
            file.delete();
        }
        else
        {
            File[] files = file.listFiles();
            
            for(File f : files)
            {
                deleteAll(f);
                
                f.delete();
            }
        }
    }
}
 


測試類:CalculatorTest

package test;

import junit.framework.Assert;
import junit.framework.TestCase;
 

public class CalculatorTest extends TestCase {
    
    private Calculator cl;
    
    public CalculatorTest(String name) {
        super(name);
    }
    @Override
    protected void setUp() throws Exception {
        System.out.println("set up");
        cl = new Calculator();
    }
    
    @Override
    protected void tearDown() throws Exception {
        System.out.println("tear down");
    }
    
    
    public void testAdd() {
        int result = cl.add(1, 2);
        Assert.assertEquals(3, result);
    }
    
    public void testSubtract() {
        int result = cl.subtract(1, 2);
        Assert.assertEquals(-1, result);
    }
    public void testMultiply() {
        int result = cl.multiply(3, 2);
        Assert.assertEquals(6, result);
    }
    
    public void testDivide() {
        int result = 0;
        try {
            result = cl.divide(6, 2);
            
        } catch (Exception e) {
            e.printStackTrace();
            Assert.fail();
        }
        Assert.assertEquals(3, result);
    }
    
    public void testDivideDivideByZero() {
        Throwable tx = null;
        
        try {
            cl.divide(6, 0);
            Assert.fail("測試失敗");
        } catch (Exception e) {
            tx = e;
        }
        Assert.assertEquals(Exception.class, tx.getClass());
        Assert.assertEquals("除數不能爲0", tx.getMessage());
    }
    }

package test;

import junit.extensions.RepeatedTest;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

批量執行測試案例,使用測試套件TestSuite

package test;

import junit.extensions.RepeatedTest;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

public class TestAll extends TestCase{
    public static Test suite() {
        //新建一個測試套件
        TestSuite suite = new TestSuite();
        //裝載CalculatorTest類,將執行CalculatorTest類中的所有測試案例
        suite.addTestSuite(CalculatorTest.class);
        suite.addTestSuite(LargestTest.class);
        suite.addTestSuite(DeleteAllTest.class);
        //表示將CaculatorTest類中的testSubtract執行20次
        suite.addTest(new RepeatedTest(new CalculatorTest("testSubtract"), 20));
        return suite;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章