public
TestResult:初試化
addError:synchronized 方法,增加一個錯誤并向所有監聽程序發送錯誤,調
用TestListener. addError
addFailure:synchronized 方法,增加一個失敗并向所有監聽程序發送失敗,調
用TestListener. addFailure
addListener:synchronized 方法,增加監聽程序
removeListener:synchronized 方法,移走監聽程序
endTest:結束測試,并通知所有監聽程序,調用TestListener.endTest
errorCount:synchronized 方法,返回錯誤個數
errors:synchronized 方法,用Enumeration 返回所有錯誤
failureCount:synchronized 方法,返回失敗個數
failures:synchronized 方法,用Enumeration 返回所有失敗
run:運行測試,創建一個Anonymous 類,實現接口Portectable,然后調用
runProtected 方法,可以參看TestCase 的run 方法。
runCount:synchronized 方法,返回運行數量
runProtected:實際運行測試
runTests:deprecated 方法,被runCount 方法替代
shouldStop:synchronized 方法,返回是否應該停止測試。
startTest:開始測試,并通知所有監聽程序,調用TestListener. startTest
stop:synchronized 方法,設置停止標志fStop 為真。注意是否停止測試TestReuslt
不負責的,stop 只是簡單設置停止標志。
testErrors:deprecated synchronized 方法,被errorCount 替代
failureCount:deprecated synchronized 方法,被testFailures 替代
wasSuccessful:synchronized 方法,如果所有運行過的測試方法都通過,返回
真,否則為否。
private
cloneListeners:復制fListeners,主要用于要使用監聽列表的endTest、startTest、
addError、addFailure
Class TestSuite
TestSuite 用于將多個TestCase 集合起來放在一起管理,TestSuite 在增加
TestCase 的時候實際已經將TestCase 實例化(按包括方法多少做多少次實例化)。
主要屬性:
private Vector fTests= new Vector(10):存放TestCase 的實例
private String fName:TestSuite 名稱
主要方法:
public
TestSuite:初始化,可以選擇空、指定名稱或包括指定的類。如果是指定的類,
那么在TestSuite 初始話的時候,TestCase 已經實例化并加入到fTests 中。
addTest:增加一個TestCase/TestSuit 的實例到fTests 中。注意由于TestCase 的
實例化實際上只指定一個測試方法,即增加一個TestCase 的實例是注冊了其中一
個測試方法,參看TestCase 類。如參數是一個TestSuite,則相當于增加了一個子
Suite.
addTestSuite:增加一個子Suite,實際效果同參數為TestSuite 的addTest。
countTestCases:返回Suite(包括子Suite)中的TestCase 實例(測試方法)數
量
run:運行測試,注意這里是運行fTests 中的所有測試,用了TestResult.
shouldStop 方法來判斷是否終止運行。實際是調用了runTest,逐漸
runTest:運行某一TestCase 或子Suite 的測試,注意使用了遞歸。如果參數test
是一個TestSuite,會再調用TestSuite.run
testAt:返回fTests 指定順序的TestCase 或者TestSuite
testCount:返回fTests 大小,注意和countTestCases 的區別
tests:返回fTests 的內容
setName:設置名稱
getName:增加名稱
toString:
private
addTestMethod:增加一個測試方法(TestCase 實例)到fTests
exceptionToString:返回一個Throwable 中的提示信息
getConstructor:返回指定類的構造函數
isPublicTestMethod:判斷一個方法是否是public 的測試方法,即一個函數是否
是public 的,同時是一個測試方法,測試方法參考下面的isTestMethod。
isTestMethod:判斷一個方法是否是測試方法,既以”test”為前綴、沒有參數及
返回值。
warning:增加一個錯誤提示Testcase到fTests中,注意這里也使用了Anonymous
Class。warning 使用主要考慮的往往在對TestSuite 進行操作的時候,不會因為有
錯就終止操作,而是在run 的時候報告錯誤
Package extensions
Package extensions 主要包括TestCase 的各種擴展。
Class Hierarchy
Class TestDecorator
TestDecorator 及其子類主要用于在TestCase 運行前后加入特定操作,進行修
飾。不應該使用TestDecorator 而應該使用TestDecorator 的子類
主要屬性
protected Test fTest:被修飾的TestCase/TestSuite。
主要方法
Public
TestDecorator:初始化,對fTest 賦值。
basicRun, run:這兩種方法實際都一樣,運行測試,為什么要有兩個請看class
TestSetup 中的run 方法代碼,run 方法可能被子類覆蓋,但basicRun 不覆蓋
countTestCases:返回TestCases/TestSuite 中測試方法的數量,實際是調用
fTest.countTestCases
getTest:返回fTest
toString:
Class RepeatedTest
繼承TestDecorator,重復運行TestSuite 指定次數。
主要屬性
private int fTimesRepeat:保存要運行的次數
主要方法
RepeatedTest:初始化,對fTimesRepeat、fTest 賦值
countTestCases:返回要允許的測試方法總次數,TestCases/TestSuite 中測試方
法的數量*fTimesRepeat
run:運行測試
toString:
Class TestSetup
繼承TestDecorator,在運行fTests 前后執行特定操作,注意和TestCase 中的
setUp/dearDown 不同,TestSetup 是在fTests 第一個方法運行前執行setUp,在所
有方法執行完畢后執行dearDown,具體看run 方法代碼。
Public:
TestSetup:初始化,對fTests 賦值
run:運行測試, 聲明了一個Anonymous Classes,實現了Interface Portectable
setUp:運行前要執行的操作,注意應該和fTests 定義的類無關
teardown:運行前要執行的操作,注意應該和fTests 定義的類無關
Class ActiveTestSuite
繼承TestSuite,在不同線程中運行測試方法,在所有方法運行完畢后在關閉
線程。
主要屬性
private volatile int fActiveTestDeathCount:保存已經運行完畢的線程數量
主要方法
Public:
run:覆蓋父類函數,運行測試。增加對fActiveTestDeathCount 置0,和線程
結束控制函數
runTest:覆蓋父類函數,運行測試方法,主要是先創建一個Thread,然后運
行測試。
waitUntilFinished:判斷是否應該結束Thread,直到fActiveTestDeathCount 等
于testCount,即TestSuite. fTests 大小
runFinished:由runTest 調用,fActiveTestDeathCount 加一
Class ExceptionTestCase
接觸TestCase,擁有測試TestCase 方法是否拋出特定Exception。
主要屬性
Class fExpected:保存要拋出的Exception
主要方法
Public
ExceptionTestCase:初始化,指定fExpected
Protected
runTest:運行測試,主要是增加了Exception 捕獲
Package runner
Package runner 主要用于定義一個基本抽象的runner,由runner 派生出來的有
swing、awt 和text 三種TestRunner。
Class & Interface Hierachy
Interface FailureDetailView
顯示失敗信息接口。主要方法有:
getComponent:返回用于顯示TraceView 的Component
showFailure:顯示失敗,參數為TestFailure
clear:清除view
Interface TestSuiteLoader
定義如何裝入一個TestSuite,主要方法
load:abstract 方法,throws ClassNotFoundException,裝入TestSuite
reload:abstract 方法,throws ClassNotFoundException,重新裝入TestSuite
Interface TestCollector
用于收集TestCase/TestSuite 的顯示名稱。只有一個方法
collectTests:以Enumeration 返回所有TestCase/TestSuite 的顯示名稱。
Class Sorter 和interface Sorter. Swapper
Class Sorter 用于提供一個快速排序法,interface Swapper 是一個內部接口,根
據注釋說明,Sorter由于與JDK 1.1.7兼容性問題,Sorter不能支持jdk2的collection
類。
interface Sorter. Swapper 只有一個方法
swap:進行替換
Class Sorter 只有一個方法
sortStrings:對字符進行排序
由于interface Sorter 沒有實現類,Sorter 不能直接使用
Class Version
Class Version 用于控制Junit 版本,主要方法只有一個:
id:返回版本號碼
Class StandardTestSuiteLoader
實現Interface TestSuiteLoader。Class StandardTestSuiteLoader 是JDK2 本身
ClassLoader 的TestSuite 裝載,同一個類只能裝入一次。
主要方法:
load:裝載
reload:重新裝載
Class TestCaseClassLoader
繼承JDK2 標準類java.lang.ClassLoader,用于取代系統確省的類裝入類。主
要是實現只從指定的路徑中裝入類,對于部分系統Package 或其他想使用系統裝
入而不是使用TestCaseClassLoader 裝入的,可以修改defaultExclusions 或將其寫
入到文件
excluded.properties 中,系統默認使用系統裝入的Package 有junit.framework、
junit.runner 、junit. extensions , 文件excluded.properties 必須和Class
TestCaseClassLoader 放在一起。在3.72 版本中的TestCaseClassLoader 不能裝入
jar 文件中類。
主要屬性
private Vector fPathItems:類查找路徑存放
private String[] defaultExclusions:確省要排除junit 的三個package
static final String EXCLUDED_FILE:用戶自定義要排除的類
private Vector fExcluded:要排除的路徑
主要方法
Public:
TestCaseClassLoader:使用系統默然或指定的類查找路徑(使用系統默認
路徑分割符號的字符串)初始化,在初始化的時候會調用scanPath 將搜索路徑加
到fPathItems 中,調用readExcludedPackages 函數,將defaultExclusions 及
EXCLUDED_FILE 中定義的要排除的類加入到fExcluded 中
getResource : 返回指定資源的url 路徑, 調用JDK2 系統的
ClassLoader.getSystemResource。資源可以是audio,icon 等,具體可以參看JDK2
的類說明
getResourceAsStream:以輸入流的方式返回指定的資源
isExcluded:判斷一個類或包是否應該排除、使用系統標準裝入
loadClass:synchronized 方法。裝入一個類,覆蓋父類方法,請參看JDK2
中ClassLoader. loadClass 定義,對于在fExcluded 的類,采用findSystemClass 直
接裝入。其他的將在fPathItems 定義的路徑中尋找(調用lookupClassData),找
到了就使用defineClass 將lookupClassData 返回的字節流轉為類并返回,否則就
拋出ClassNotFoundException
package private(default)
isJar:判斷一個文件是否用jar 或zip 結尾
private
scanPath:由TestCaseClassLoader 調用將搜索路徑加到fPathItems 中
lookupClassData:查找指定的類,并將class 內容以字節流的方式返回,
調用了loadJarData,loadFileData。
loadFileData:從文件中裝入類的字節流實際讀入是調用函數getClassData
loadJarData:從zip 文件中(注意,3.72junit 不支持jar 文件)讀入類的字
節流
readExcludedPackages:將defaultExclusions 及EXCLUDED_FILE 中定義
的要排除的類加入到fExcluded 中
Class ReloadingTestSuiteLoader
實現接口TestSuiteLoader,使用TestCaseClassLoader 來裝入類。主要方法:
load:裝載
reload:重新裝載
Class ClassPathTestCollector
實現TestCollector接口,分析Java Class Path,并對Class Path中所有的類(JAR、
ZIP 文件除外)進行分析,根據指定的規則找出可以運行的測試類。具體規則見
isTestClass 方法
主要屬性:
static final int SUFFIX_LENGTH:保持”.class”的長度
主要方法
Public
ClassPathTestCollector:初始化函數
collectTests:以Enumeration 的方式返回所有可以運行的測試類,調用
splitClassPath 將Class Path 分解為一個Vector,調用collectFilesInRoots 獲取類
Package Private(Default)
collectFilesInRoots:搜索參數一中的路徑,返回所有類。調用gatherFiles
實際獲取類
gatherFiles:獲取指定目錄下的所有類,是一個遞歸函數。
splitClassPath:將Class Path 分解為一個Vector
Protected
isTestClass:判斷一個類是不是測試類,規則文件名中擴展名為class,不包
括”$”,包含了”Test”。
classNameFromFile:從文件名中獲取類名稱
Class SimpleTestCollector
繼承了ClassPathTestCollector , 從代碼來看, 實際沒有對
ClassPathTestCollector 做任何修改,雖然代碼包括isTestClass,但其中的代碼和
ClassPathTestCollector 中是一樣的。
Class LoadingTestCollector
繼承了ClassPathTestCollector,修改了判斷測試類的方法。
主要屬性:
TestCaseClassLoader fLoader:類裝入類
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/