JUnit 中的最重要的程序包是 junit.framework 它包含了所有的核心類。一些重要的類列示如下:
序號 | 類的名稱 | 類的功能 |
---|---|---|
1 | Assert | assert 方法的集合 |
2 | TestCase | 一個定義了運(yùn)行多重測試的固定裝置 |
3 | TestResult | TestResult 集合了執(zhí)行測試樣例的所有結(jié)果 |
4 | TestSuite | TestSuite 是測試的集合 |
下面介紹的是 org.junit.Assert 類:
public class Assert extends java.lang.Object
這個類提供了一系列的編寫測試的有用的聲明方法。只有失敗的聲明方法才會被記錄。Assert 類的重要方法列式如下:
序號 | 方法和描述 |
---|---|
1 | void assertEquals(boolean expected, boolean actual) 檢查兩個變量或者等式是否平衡 |
2 | void assertFalse(boolean condition) 檢查條件是假的 |
3 | void assertNotNull(Object object) 檢查對象不是空的 |
4 | void assertNull(Object object) 檢查對象是空的 |
5 | void assertTrue(boolean condition) 檢查條件為真 |
6 | void fail() 在沒有報告的情況下使測試不通過 |
下面讓我們在例子中來測試一下上面提到的一些方法。在 C:\ > JUNIT_WORKSPACE 目錄下創(chuàng)建一個名為 TestJunit1.java 的類。
import org.junit.Test;
import static org.junit.Assert.*;
public class TestJunit1 {
@Test
public void testAdd() {
//test data
int num= 5;
String temp= null;
String str= "Junit is working fine";
//check for equality
assertEquals("Junit is working fine", str);
//check for false condition
assertFalse(num > 6);
//check for not null value
assertNotNull(str);
}
}
接下來,我們在 C:\ > JUNIT_WORKSPACE 目錄下創(chuàng)建一個文件名為 TestRunner1.java 的類來執(zhí)行測試案例。
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner1 {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit1.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
用 javac 編譯 Test case 和 Test Runner 類
C:\JUNIT_WORKSPACE>javac TestJunit1.java TestRunner1.java
現(xiàn)在運(yùn)行 Test Runner 它將運(yùn)行在 Test Case 類中定義并提供的測試樣例。
C:\JUNIT_WORKSPACE>java TestRunner1
檢查輸出結(jié)果。
true
下面介紹的是 org.junit.TestCaset 類:
public abstract class TestCase extends Assert implements Test
測試樣例定義了運(yùn)行多重測試的固定格式。TestCase 類的一些重要方法列式如下:
序號 | 方法和描述 |
---|---|
1 | int countTestCases() 為被run(TestResult result) 執(zhí)行的測試案例計數(shù) |
2 | TestResult createResult() 創(chuàng)建一個默認(rèn)的 TestResult 對象 |
3 | String getName() 獲取 TestCase 的名稱 |
4 | TestResult run() 一個運(yùn)行這個測試的方便的方法,收集由TestResult 對象產(chǎn)生的結(jié)果 |
5 | void run(TestResult result) 在 TestResult 中運(yùn)行測試案例并收集結(jié)果 |
6 | void setName(String name) 設(shè)置 TestCase 的名稱 |
7 | void setUp() 創(chuàng)建固定裝置,例如,打開一個網(wǎng)絡(luò)連接 |
8 | void tearDown() 拆除固定裝置,例如,關(guān)閉一個網(wǎng)絡(luò)連接 |
9 | String toString() 返回測試案例的一個字符串表示 |
我們在例子中嘗試一下上文提到的方法。在 C:\ > JUNIT_WORKSPACE 路徑下創(chuàng)建一個名為TestJunit2.java 的類。
import junit.framework.TestCase;
import org.junit.Before;
import org.junit.Test;
public class TestJunit2 extends TestCase {
protected double fValue1;
protected double fValue2;
@Before
public void setUp() {
fValue1= 2.0;
fValue2= 3.0;
}
@Test
public void testAdd() {
//count the number of test cases
System.out.println("No of Test Case = "+ this.countTestCases());
//test getName
String name= this.getName();
System.out.println("Test Case Name = "+ name);
//test setName
this.setName("testNewAdd");
String newName= this.getName();
System.out.println("Updated Test Case Name = "+ newName);
}
//tearDown used to close the connection or clean up activities
public void tearDown( ) {
}
}
接下來,在 C:\ > JUNIT_WORKSPACE 路徑下創(chuàng)建一個名為 TestRunner2.java 的類來執(zhí)行測試案例。
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner2 {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit2.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
用 javac 編譯 Test case 和 Test Runner 類
C:\JUNIT_WORKSPACE>javac TestJunit2.java TestRunner2.java
現(xiàn)在運(yùn)行 Test Runner 它將運(yùn)行在 Test Case 類中定義并提供的測試樣例。
C:\JUNIT_WORKSPACE>java TestRunner2
檢查輸出結(jié)果。
No of Test Case = 1
Test Case Name = testAdd
Updated Test Case Name = testNewAdd
true
下面定義的是 org.junit.TestResult 類:
public class TestResult extends Object
TestResult 類收集所有執(zhí)行測試案例的結(jié)果。它是收集參數(shù)層面的一個實(shí)例。這個實(shí)驗(yàn)框架區(qū)分失敗和錯誤。失敗是可以預(yù)料的并且可以通過假設(shè)來檢查。錯誤是不可預(yù)料的問題就像 ArrayIndexOutOfBoundsException。TestResult 類的一些重要方法列式如下:
序號 | 方法和描述 |
---|---|
1 | void addError(Test test, Throwable t) 在錯誤列表中加入一個錯誤 |
2 | void addFailure(Test test, AssertionFailedError t) 在失敗列表中加入一個失敗 |
3 | void endTest(Test test) 顯示測試被編譯的這個結(jié)果 |
4 | int errorCount() 獲取被檢測出錯誤的數(shù)量 |
5 | Enumeration 返回錯誤的詳細(xì)信息 |
6 | int failureCount() 獲取被檢測出的失敗的數(shù)量 |
7 | void run(TestCase test) 運(yùn)行 TestCase |
8 | int int runCount() 獲得運(yùn)行測試的數(shù)量 |
9 | void startTest(Test test) 聲明一個測試即將開始 |
10 | void stop() 標(biāo)明測試必須停止 |
在 C:\ > JUNIT_WORKSPACE 路徑下創(chuàng)建一個名為 TestJunit3.java 的類。
import org.junit.Test;
import junit.framework.AssertionFailedError;
import junit.framework.TestResult;
public class TestJunit3 extends TestResult {
// add the error
public synchronized void addError(Test test, Throwable t) {
super.addError((junit.framework.Test) test, t);
}
// add the failure
public synchronized void addFailure(Test test, AssertionFailedError t) {
super.addFailure((junit.framework.Test) test, t);
}
@Test
public void testAdd() {
// add any test
}
// Marks that the test run should stop.
public synchronized void stop() {
//stop the test here
}
}
接下來,在 C:\ > JUNIT_WORKSPACE 路徑下創(chuàng)建一個名為 TestRunner3.java 的類來執(zhí)行測試案例。
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner3 {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit3.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
用 javac 編譯 Test case 和 Test Runner 類
C:\JUNIT_WORKSPACE>javac TestJunit3.java TestRunner3.java
現(xiàn)在運(yùn)行 Test Runner 它將運(yùn)行在 Test Case 類中定義并提供的測試樣例。
C:\JUNIT_WORKSPACE>java TestRunner3
檢查輸出結(jié)果。
true
下面定義的是 org.junit.TestSuite 類:
public class TestSuite extends Object implements Test
TestSuite 類是測試的組成部分。它運(yùn)行了很多的測試案例。TestSuite 類的一些重要方法列式如下:
序號 | 方法和描述 |
---|---|
1 | void addTest(Test test) 在套中加入測試。 |
2 | void addTestSuite(Class<? extends TestCase> testClass) 將已經(jīng)給定的類中的測試加到套中。 |
3 | int countTestCases() 對這個測試即將運(yùn)行的測試案例進(jìn)行計數(shù)。 |
4 | String getName() 返回套的名稱。 |
5 | void run(TestResult result) 在 TestResult 中運(yùn)行測試并收集結(jié)果。 |
6 | void setName(String name) 設(shè)置套的名稱。 |
7 | Test testAt(int index) 在給定的目錄中返回測試。 |
8 | int testCount() 返回套中測試的數(shù)量。 |
9 | static Test warning(String message) 返回會失敗的測試并且記錄警告信息。 |
在 C:\ > JUNIT_WORKSPACE 路徑下創(chuàng)建一個名為 JunitTestSuite.java 的類。
import junit.framework.*;
public class JunitTestSuite {
public static void main(String[] a) {
// add the test's in the suite
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());
}
}
用 javac 編譯 Test suit
C:\JUNIT_WORKSPACE>javac JunitTestSuite.java
現(xiàn)在運(yùn)行 Test Suit
C:\JUNIT_WORKSPACE>java JunitTestSuite
檢查輸出結(jié)果。
No of Test Case = 1
Test Case Name = testAdd
Updated Test Case Name = testNewAdd
Number of test cases = 3