Junit
一、Junit測試前期準備
1. 什麼是Junit
Junit 是一個基於Java語言實現的單元測試的框架。通過Junit 測試框架就可以對項目中的某個類的方法進行測試。
2. 開啓Junit
本文假設大家都有Java開發經驗,使用IDEA,以下是在maven項目中添加測試類的步驟
步驟一:加入依賴
首先,在pom.xml文件中加入Junit依賴:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
步驟二:下載插件
下載插件:
File ——> Settings ——> Plugins ——> 搜索junit下載以下插件
至此,作爲一個maven項目就可以開始使用Junit框架了
步驟三:開始測試
maven的test文件夾就是用來存放測試類的文件夾,所以對本項目的測試文件都存放在該目錄下。
快捷生成對應類或者方法的測試類:到類名處,按下快捷鍵: CTRL + Shift + T 出現:
進入創建框:
點擊OK後就會在test目錄下創建一個自己定義測試類名稱的測試類,以及勾選的方法。如下:
到這裏,就可以在對應的方法中編寫測試的方法,隨便寫寫:
每個被生成出來的測試方法都有這個可以直接運行的標誌,就不需要通過main方法,而可以直接只運行這一小部分。
基本的簡單實踐後,再來學學理論這一part,將會有更加明朗的認識。
二、JUnit 理論知識
1. Junit可以用來幹什麼?
上面我們以及初步知道JUnit測試框架可以用來編寫一些測試類,但上面只是一個一個的運行測試類,如果在大型項目中,可不可以將所有測試方法統一組裝起來運行呢?當然可以!這就是測試套件和測試運行器。
那如果想在測試中加一些判斷,判斷運行後的結果與期望效果是否一樣,就可以使用斷言。
2. 重要API
JUnit是使用Java語言編寫的一個框架,在使用時,我們需要導入對應的包,調用類的不同API來達到目的。
JUnit中最重要的就是 junit.framework
包,它包含了所有測核心類,最重要的四個類是:
類名 | 功能 |
---|---|
Assert | 斷言方法的集合 |
TestCase | 多重測試固定裝置 |
TestResult | 測試結果 |
TestSuite | 組合多個測試方法的套件 |
(1)Assert類
這個類就是用來判斷程序測試結果和預期結果是否一樣。有很多判斷的方式,只有返回是錯誤,纔會記錄下來:
重點有的方法:
方法 | 作用 |
---|---|
void assertEquals(boolean expected, boolean actual) | 檢查兩個變量是否相等 |
void assertFalse(boolean condition) | 檢查條件爲假,不是false就錯誤 |
void assertNotNull(Object object) | 檢查對象不爲空,爲null就錯誤 |
void assertNull(Object object) | 檢查對象爲空,不爲null就錯誤 |
void assertTrue(boolean condition) | 檢查條件爲真 |
寫個小栗子:
@Test
public void testAssert() {
int n = 5;
String s = "test", s1 = null;
assertEquals(n,5);
assertNotEquals(s,"tttt");
assertFalse(n > 6);
assertTrue(n == 5);
assertNotNull(s);
assertNull(s1);
}
執行,通過:
(2 )TestCase類
TestCase 類的一些重要方法列式如下:
方法 | 功能 |
---|---|
int countTestCases() | 爲被run(TestResult result) 執行的測試案例計數 |
TestResult createResult() | 創建一個默認的 TestResult 對象 |
String getName() | 獲取 TestCase 的名稱 |
TestResult run() | 一個運行這個測試的方便的方法,收集由TestResult 對象產生的結果 |
void run(TestResult result) | 在 TestResult 中運行測試案例並收集結果 |
void setName(String name) | 設置 TestCase 的名稱 |
void setUp() | 每一個測試用例執行前執行 |
void tearDown() | 每一個測試用例執行後再執行 |
String toString() | 返回測試案例的一個字符串表示 |
舉一個例子:
import junit.framework.TestCase;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class practice extends TestCase {
protected double fValue1;
protected double fValue2;
@Before
public void setUp() {
fValue1= 2.0;
fValue2= 3.0;
}
@Test
public void testAdd() {
double ans = fValue1 + fValue2;
}
@Test
public void testMul() {
double ans = fValue1 * fValue2;
}
@After
public void tearDown() {
fValue1= 0;
fValue2= 0;
}
}
這就是一個簡單的測試類,兩個test測試方法在執行前都會先執行setUp()方法,在執行結束後會執行tearDown()方法。還有兩個相似的是beforeClass() 方法和afterClass() 方法它們都是在最開始/結束執行一次。
(3)TestResult 類
TestResult 類是用來統計收集所有執行測試案例的結果。
TestResult 類的一些重要方法如下:
方法 | 功能 |
---|---|
void addError(Test test, Throwable t) | 在錯誤列表中加入一個錯誤 |
void addFailure(Test test, AssertionFailedError t) | 在失敗列表中加入一個失敗 |
void endTest(Test test) | 顯示測試被編譯的這個結果 |
int errorCount() | 獲取被檢測出錯誤的數量 |
int failureCount() | 獲取被檢測出的失敗的數量 |
void run(TestCase test) | 運行 TestCase |
int int runCount() | 獲得運行測試的數量 |
void startTest(Test test) | 聲明一個測試即將開始 |
void stop() | 標明測試必須停止 |
(4)TestSuite 類
TestSuite 類是測試的組成部分。它可以將多種測試用例都組合起來一起運行。
TestSuite 類的一些重要方法列式如下:
方法 | 功能 |
---|---|
void addTest(Test test) | 在套件中加入測試用例 |
void addTestSuite(Class<? extends TestCase> testClass) | 將類中的測試加到套件中 |
int countTestCases() | 對這個測試即將運行的測試案例進行計數 |
String getName() | 返回套件的名稱 |
void run(TestResult result) | 在 TestResult 中運行測試並收集結果 |
void setName(String name) | 設置套的名稱 |
int testCount() | 返回套中測試的數量 |
static Test warning(String message) | 返回會失敗的測試並且記錄警告信息 |
來一個例子:
先創建了TestJunit1, TestJunit2, TestJunit3三個測試類,接着創建一個suite套件將它們組合起來一起運行。如下
import junit.framework.*;
public class JunitTestSuite {
public static void main(String[] a) {
TestSuite suite = new TestSuite(
TestJunit1.class, TestJunit2.class, TestJunit3.class );
TestResult result = new TestResult();
suite.run(result);
System.out.println("Number of test cases = " + result.runCount());
}
}
如果我們想在某一個測試類中不執行其中一個測試方法,就可以添加@Ignore 註釋,添加後,這個方法就會被忽略而不會執行。
這就是JUnit的簡單入門,如果文章有任何問題歡迎評論指正,希望能幫到你。也歡迎點贊關注一起進步!
參考文章:https://www.w3cschool.cn/junit/fegu1hv3.html