相信大部分新手在測試程序的時候都喜歡在方法中使用System.out.println()
方法直接把結果打印出來,看結果是否符合預期。這種方法在測試代碼量很小、邏輯簡單的程序時很方便。但平常工做中的項目中的代碼量大、邏輯複雜,若是仍是在方法中使用System.out.println()
來測試,只是輸出結果就使人眼花繚亂。這時候咱們就但願有一個工具是咱們更加方便的在複雜的項目中進行測試。JUnit就是這樣一個工具。api
JUnit是一個Java語言的單元測試框架。它不只能夠根據測試數據來驗證程序的正確性,還將測試代碼與工程代碼分離,此外它還能夠進行批量測試程序,極大的方便了測試工做。JUnit的使用很簡單,只須要在方法上加上@Test
註解,JUint就能夠識別到這個測試方法。bash
下面是一個使用JUint小栗子。在這個例子中,咱們建立了一個Calculator
類和一個CalculatorTest
類。Calculator
類中實現了兩個簡單的方法:add()
和sub()
,其中add()
方法的邏輯是正確的,其返回值是兩個參數之和;sub()
方法的邏輯是錯誤的,返回值是也是兩個參數之和。CalculatorTest
類也有兩個方法:addTest()
和subTest()
。其中addTest()
用來測試Calculator類中的add方法,subTest()
方法用來測試Calculator
類中的sub()
方法。框架
Step.1 在IDEA中建立一個Maven工程工具
Step.2 在pom.xml文件中添加JUnit的依賴,這樣咱們就可使用JUint啦。這裏使用最新版的JUnit。單元測試
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.5.0-M1</version>
<scope>test</scope>
</dependency>
複製代碼
Step.3 編寫Calculator
類。學習
package com.junit;
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int sub(int a, int b) {
return a + b;
}
}
複製代碼
Step.4 編寫CalculatorTest
測試類。測試
咱們將使用CalculatorTest
類測試Calculator
類的正確性。CalculatorTest
類中有兩個方法:addTest()
和subTest()
,它們都須要使用@Test
解來註明這是一個測試方法。這兩個方法的邏輯大體相同,都是先建立一個Calculator
類的對象,調用各自要測試的方法,最後使用Assertions.assertEquals()
來讓JUnit判斷程序是否正確。Assertions
是JUnit提供的用來驗證程序運行結果的類,這裏咱們使用的Assertions.assertEquals()
方法有兩個參數,第一個參數是預期值,第二個參數是程序的運行結果,調用Assertions.assertEquals()
方法就可讓JUnit比較預期值和程序運行結果,以驗證程序的正確性。Assertions
中提供了不少Assertions.assertEquals()
方法的重載方法來比較不一樣類型的數據,以便於使用。ui
package com.junit;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
public class CalculatorTest {
@Test
public void addTest() {
System.out.println("execute addTest");
Calculator calculator = new Calculator();
int result = calculator.add(1, 3);
Assertions.assertEquals(4, result);
}
@Test
public void subTest() {
System.out.println("execute subTest");
Calculator calculator = new Calculator();
int result = calculator.add(1, 3);
Assertions.assertEquals(2, result);
}
}
複製代碼
Step.5 測試結果spa
CalculatorTest類在IDEA的顯示以下圖所示,咱們能夠點擊方法左邊的按鈕運行單個測試方法,也能夠點擊類名左邊的按鈕運行測試類中的全部測試方法。 3d
Caluculator
類中的
add()
方法邏輯是正確的因此測試結果是正確的,在IDEA中的運行結果以下圖所示。
Calculator
類中的
sub()
方法的邏輯是錯誤的,因此不會經過測試。從上圖也能夠看出IDEA在輸出欄中報錯了,並打印出指望值是2,實際運行結果是4的錯誤。
@BeforeAll @AfterAll @BeforeEach @AfterEach
註解的使用有些時候咱們須要在測試方法以前和以後作一些工做,例如打開和釋放資源。JUnit提供了一組註解來幫助咱們實現這類操做。
@BeforeAll
註解的方法會在測試類的全部測試方法(包括被@BeforeEach
註解的方法)執行以前執行。使用@BeforeAll
註釋的方法必須爲static
方法
@AfterAll
會在測試類的全部測試方法(包括被@BeforeEach
註解的方法)執行以前執行。使用@AfterAll
註釋的方法必須爲static
方法
@BeforeEach
會在測試類的全部測試方法(除了被@BeforeAll
註解的方法)執行以前執行。
@AfterEach
會在測試類的全部測試方法(除了被@AfterAll
註解的方法)執行以後執行。
爲了進一步瞭解這幾個註解的使用,咱們在CalculatorTest
類中添加這幾個註解。
package com.junit;
import org.junit.jupiter.api.*;
public class CalculatorTest {
@BeforeAll
public static void beforeAll() {
System.out.println("beforeAll");
}
@BeforeEach
public void beforeEach() {
System.out.println("beforeEach");
}
@AfterAll
public static void afterAll() {
System.out.println("afterAll");
}
@AfterEach
public void afterEach() {
System.out.println("afterEach");
}
@Test
public void addTest() {
System.out.println("execute addTest");
Calculator calculator = new Calculator();
int result = calculator.add(1, 3);
Assertions.assertEquals(4, result);
}
@Test
public void subTest() {
System.out.println("execute subTest");
Calculator calculator = new Calculator();
int result = calculator.add(1, 3);
Assertions.assertEquals(2, result);
}
}
複製代碼
運行結果以下圖所示
@BeforeAll
註解的方法在全部測試方法被執行以前執行,使用
@AfterAll
註解的方法在全部測試方法被執行以後執行,它們都只被執行了一次。使用
@BeforeEach
在測試類的除了被
@BeforeAll
註解的方法的全部測試方法執行以前被執行。使用
@AfterEach
會在測試類的除了被
@AfterAll
註解的方法全部測試方法執行以後執行,它們都被執行了兩次。
JUnit使用入門的介紹到此結束,對JUnit有興趣的同窗能夠進行更深刻的學習。