XP单元测试工具Junit源代码学习

发表于:2009-03-25来源:作者:点击数: 标签:工具junitJUNITJUnitJunit
XP单元 测试 工具 Junit 源代码学习 主要方法 countTestCases:统计 TestCases 数目 run:运行测试并将结果返回到指定的TestResult 中 Class Assert 首先,Assert 提供的public 方法都可以带或不带自己定义的提示,其次Assert 中的Assert 方法是protected 的

XP单元测试工具Junit源代码学习

主要方法

countTestCases:统计

TestCases 数目
run:运行测试并将结果返回到指定的TestResult 中
Class Assert 首先,Assert 提供的public 方法都可以带或不带自己定义的提示,其次Assert
中的Assert 方法是protected 的,这意外着Assert 是一个静态类,它提供的方法
都是Static 的。
public 方法:
assert:保留(deprecated)方法,判断一个条件是否为真
assertTrue:assert 的替代方法,判断一个条件是否为真
assertEquals:用于判断实际值和期望值是否相同(Equals),可以是各种JAVA
对象。
assertNotNull:判断一个对象是否不为空
assertNull:判断一个对象是否为空
assertSame:判断实际值和期望值是否为同一个对象(="=),注意和assertEquals 区分
fail:直接返回失败,抛出AssertionFailedError
private 方法:
failNotEquals:主要用于assertEquals 方法,调用fail 返回失败提示
failNotSame:主要用于assertSame 方法,调用fail 返回失败提示
Class AssertionFailedError
AssertionFailedError 是从Jdk 提供Error 类简单继承而来,主要方法如下:
public AssertionFailedError (String message) {
super (message);
}
Class Assert 中比较失败都是抛出AssertionFailedError。
Interface Protectable
这个接口是使用了一种比较少见的用法。
在Interface 本身只定义了一个方法
public abstract void protect() throws Throwable;
注意方法throws 的是所有Error 和Exception 的祖先。通过这种定义可以保
证运行的时候如果出现任何Error 和Exception,都将被抛出而不会导致程序不能
继续运行。
Portectable 的接口没有被framework 包中的任何类实现,它的使用在类
TestResult 中的run 方法中。以下是run 方法中代码:
protected void run(final TestCase test) {
startTest(test);
Protectable p= new Protectable() {
public void protect() throws Throwable {
test.runBare();
}
};
runProtected(test, p);
endTest(test);
}
这里实际是声明了一个Anonymous Classes,实现了Interface Portectable
Interface TestListener
TestListener 的用途和它名称一样,用于监听。主要用于运行时刻监听,
BaseRunner(所有运行类,如TestRunner)实现了这一接口。由于运行是通过
TestResult 来实现,只要调用TestResult.addListener 就可以增加监听,TestResult
会调用接口中相应的方法,具体见TestResult。


主要方法:

public

addError:增加错误,注意这里错误应该指测试程序本身的错误或者被测试程
序错误,而不是测试失败
addFailure:增加一个测试失败,专用于AssertionFailedError 的处理
endTest:结束测试
startTest:开始测试
Class TestCase
使用者最主要使用的类,继承Class Assert,实现Interface Test。主要方法
public
TestCase:创建本身,可以指定TestCase 准备运行的测试方法名称,保存在私
有属性fName。
countTestCases:返回TestCase 数目,直接返回1
name:deprecated,建议使用getName,返回TestCase 当前准备允许的测试方法
的名称(私有属性fName)
run:运行TestCase,如果没有指定结果存储的TestResult,将调用createResu(lt
方法。注意,TestCase 与TestResult 会有互相调用。整个运行流程如下:
1、TestCase.run 调用TestResult.run
2、TestResult.run 调用TestResult .StartTest
3、TestResult.run 创建一个Anonymous 类,实现接口Portectable
4、在Portectable. protect 方法中调用TestCase .runBare
5、通过运行Portectable.runBare 调用runBare,通过Exception 捕获增加错误
及失败报告
runBare:不使用TestResult 直接运行
runTest:运行测试,注意每调用runTest 只运行当前fName 指定的方法
getName:返回fName
setName:设置fName
protected
createResult:创建一个TestResult
setUp:在运行runTest 前调用
tearDown:在运行runTest 后调用
Class TestFailure
用于存放测试对比失败信息的类。主要为Class TestResult 调用。主要属性
protected Test fFailedTest;
protected Throwable fThrownException;
fFailedTest 存放失败的TestCase 信息,fThrownException 存放失败提示信息。


主要方法:

public

TestFailure:初始化,对fFailedTest、fThrownException 赋值。
failedTest:返回fFailedTest
thrownException:返回fThrownException
toString:
Class TestResult
TestResult 用于运行并收集测试结果(通过Exception 捕获),注意interface
TestListener 的所有方法在这里都有同名方法并在同名方法中被调用。
主要属性:
protected Vector fFailures:测试失败报告保存
protected Vector fErrors:测试错误报告保存
protected Vector fListeners:测试监听器保存
protected int fRunTests:运行的测试
private boolean fStop:是否应该停止测试标志,由stop 方法设置


原文转自:http://www.ltesting.net