軟件測試————如何使用Junit進行Java單元測試


文章目錄:

  1. 什么是單元測試
  2. Junit單元測試的優勢
  3. 如何使用Junit
  4. Junit編碼規范

1. 什么是單元測試
“單元測試是測試程序構件(例如,方法或對象類)的過程。各個函數或方法是構件的最簡單形式。測試應當用不同的輸入參數來調用這些程序。”
以上是《軟件工程》一書對此的描述。用自己的話來說,就是對程序模塊(軟件設計的最小單位)進行測試,檢查模塊的功能與穩定性。在軟件開發的過程中,每當我們實現了某一個模塊,就需要測試其是否正常和達到預期,只有在確保每個模塊都正常工作的前提下,才能保證整個軟件系統的平穩運行。
2. Junit單元測試的優勢
如果沒有junit,我們是怎么測試軟件的?下面舉一個例子。
我們先隨便編寫了一個計算器類,包含加法和減法兩個方法。

public class Calculator {
    //加法
    public int add(int a,int b){
        return a+b;
    }
    //減法
    public int subtract(int a,int b){
        return a-b;
    }
}

然后編寫測試類測試這兩個方法。
首先需要創建對象,然后調用這兩個方法,查看輸出的結果,發現答案正確。之后再去編寫其他模塊。

package com.teachertom.calculator;

public class TestCalculator {
    public static void main(String[] args) {
        Calculator calculator=new Calculator();
        System.out.println(calculator.add(5,5));//正確答案10
        System.out.println(calculator.subtract(10,5));//正確答案5
    }
}

這樣的方法很不方便,需要手動地對比測試數據,而且當測試量非常大時,我們不可能同時在一個測試類中測試,還需要將部分代碼注釋;
同時,很多情況下各種數據相互關聯,修改一個數據可能影響到其他的數據,極大地增加了測試的工作量,拖慢了工作進度。
於是,我們引入了Junit單元測試。
3. 如何使用Junit
首先,我們需要創建一個與當前包同級的包,命名為xxx.xxx.xxx.test
然后在此包下創建測試類,類名:被測試的類Test
定義我們需要測試的方法,方法名:test測試的方法名,返回類型一般為void,不含參數
隨后在方法體上加上@Test,並導入Junit包org.junit.Test.
代碼如下:

package com.teachertom.test;

import org.junit.Test;

public class CalculatorTest {
    @Test
    public void testAdd(){

    }

    @Test
    public void testSubtract(){

    }
}

這樣每個測試方法都可以單獨運行了。以idea為示例,效果應是這樣的。

點擊方法左邊單個三角運行單個方法,點擊類名旁的雙三角運行所有方法。如果測試方法體中產生了異常就會報錯並提示你發生錯誤的方法。如圖發生了算術異常:

下面介紹如何使用Junit判別測試結果。
使用Assert類的靜態方法,assertEquals(),包含兩個參數,左邊是預期值,右邊是實際值。當預期值與實際值不同時便會報錯。

package com.teachertom.test;

import com.teachertom.calculator.Calculator;
import org.junit.Assert;
import org.junit.Test;

public class CalculatorTest {
    @Test
    public void testAdd(){
        Calculator calculator=new Calculator();
        Assert.assertEquals(10,calculator.add(5,5));
    }

    @Test
    public void testSubtract(){
        Calculator calculator=new Calculator();
        Assert.assertEquals(5,calculator.subtract(10,5));
    }
}

點擊運行,實際值與預期值相符,測試通過。

如果不相符,則會出現下列字樣。

除此之外,Assert還有一個方法assertArrayEquals(),可以用來測試數組,用法與assertEquals()相同。
@Before與@After注解
在上述的操作中存在一些重復的操作,比如每個方法中都要創建對象。對此,我們可以使用@Before注解來預加載一些內容。
在最后需要關閉和銷毀資源的時候,也可以使用@After注解。
@Before和@After注解在程序報錯的時候,仍然可以保證數據的初始化和關閉銷毀,兩個方法是依舊執行的。

package com.teachertom.test;

import com.teachertom.calculator.Calculator;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class CalculatorTest {
    private Calculator calculator;
    @Before
    public void init(){
        calculator=new Calculator();
    }
    @Test
    public void testAdd(){
        Assert.assertEquals(10,calculator.add(5,5));
    }

    @Test
    public void testSubtract(){
        Assert.assertEquals(5,calculator.subtract(10,5));
    }
    @After
    public void close(){
        System.out.println("關閉資源");
    }
}

4.Junit編碼規范
在使用Junit的過程中,最好遵循以下規范
類名: 被測試類名Test 例如:CalculatorTest
包名: xxx.xxx.xxx.test例如:com.teachertom.test;
方法名: test測試方法 例如:testAdd
返回值: void
參數列表: 空
*不要忘記添加@Test注解和導入Junit包


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM