junit源码学习--观察者模式
2010-05-23 17:07
429 查看
TestResult担任发布者角色,拥有protected List<TestListener> fListeners;担任观察者角色
以下都是TestResult类源码
/**
* Registers a TestListener观察者注册
*/
public synchronized void addListener(TestListener listener) {
fListeners.add(listener);
}
/**
* Unregisters a TestListener观察者移除
*/
public synchronized void removeListener(TestListener listener) {
fListeners.remove(listener);
}
/**
*因为listeners始终指向同一组对象,为了防止线程问题,加上了synchronized标识,每次测试使用一组copy
* Returns a copy of the listeners.
*/
private synchronized List<TestListener> cloneListeners() {
List<TestListener> result= new ArrayList<TestListener>();
result.addAll(fListeners);
return result;
}
/**
*运行testcase
* Runs a TestCase.
*/
protected void run(final TestCase test) {
startTest(test);//通知观察者改变状态
Protectable p= new Protectable() {
public void protect() throws Throwable {
test.runBare();
}
};
runProtected(test, p);
endTest(test);//通知观察者改变状态
}
/**
*通知观察者改变状态(测试开始)
* Informs the result that a test will be started.
*/
public void startTest(Test test) {
final int count= test.countTestCases();
synchronized(this) {
fRunTests+= count;
}
for (TestListener each : cloneListeners())
each.startTest(test);//每个listener调用startTest方法
}
/**
*通知观察者改变状态(测试结束)
* Informs the result that a test was completed.
*/
public void endTest(Test test) {
for (TestListener each : cloneListeners())
each.endTest(test);//每个listener调用startTest方法
}
/**
*实际运行testcase
* Runs a TestCase.
*/
public void runProtected(final Test test, Protectable p) {
try {
p.protect();
}
catch (AssertionFailedError e) {
addFailure(test, e);
}
catch (ThreadDeath e) { // don't catch ThreadDeath by accident
throw e;
}
catch (Throwable e) {
addError(test, e);
}
}
/**
*在实际运行testcase中出现assert异常,则通知观察者listeners
* Adds a failure to the list of failures. The passed in exception
* caused the failure.
*/
public synchronized void addFailure(Test test, AssertionFailedError t) {
fFailures.add(new TestFailure(test, t));
for (TestListener each : cloneListeners())
each.addFailure(test, t);//每个listener接收assert异常
}
/**
*在实际运行testcase中出现异常,则通知观察者listeners
* Adds an error to the list of errors. The passed in exception
* caused the error.
*/
public synchronized void addError(Test test, Throwable t) {
fErrors.add(new TestFailure(test, t));
for (TestListener each : cloneListeners())
each.addError(test, t);//每个listener接收异常
}
以下都是TestResult类源码
/**
* Registers a TestListener观察者注册
*/
public synchronized void addListener(TestListener listener) {
fListeners.add(listener);
}
/**
* Unregisters a TestListener观察者移除
*/
public synchronized void removeListener(TestListener listener) {
fListeners.remove(listener);
}
/**
*因为listeners始终指向同一组对象,为了防止线程问题,加上了synchronized标识,每次测试使用一组copy
* Returns a copy of the listeners.
*/
private synchronized List<TestListener> cloneListeners() {
List<TestListener> result= new ArrayList<TestListener>();
result.addAll(fListeners);
return result;
}
/**
*运行testcase
* Runs a TestCase.
*/
protected void run(final TestCase test) {
startTest(test);//通知观察者改变状态
Protectable p= new Protectable() {
public void protect() throws Throwable {
test.runBare();
}
};
runProtected(test, p);
endTest(test);//通知观察者改变状态
}
/**
*通知观察者改变状态(测试开始)
* Informs the result that a test will be started.
*/
public void startTest(Test test) {
final int count= test.countTestCases();
synchronized(this) {
fRunTests+= count;
}
for (TestListener each : cloneListeners())
each.startTest(test);//每个listener调用startTest方法
}
/**
*通知观察者改变状态(测试结束)
* Informs the result that a test was completed.
*/
public void endTest(Test test) {
for (TestListener each : cloneListeners())
each.endTest(test);//每个listener调用startTest方法
}
/**
*实际运行testcase
* Runs a TestCase.
*/
public void runProtected(final Test test, Protectable p) {
try {
p.protect();
}
catch (AssertionFailedError e) {
addFailure(test, e);
}
catch (ThreadDeath e) { // don't catch ThreadDeath by accident
throw e;
}
catch (Throwable e) {
addError(test, e);
}
}
/**
*在实际运行testcase中出现assert异常,则通知观察者listeners
* Adds a failure to the list of failures. The passed in exception
* caused the failure.
*/
public synchronized void addFailure(Test test, AssertionFailedError t) {
fFailures.add(new TestFailure(test, t));
for (TestListener each : cloneListeners())
each.addFailure(test, t);//每个listener接收assert异常
}
/**
*在实际运行testcase中出现异常,则通知观察者listeners
* Adds an error to the list of errors. The passed in exception
* caused the error.
*/
public synchronized void addError(Test test, Throwable t) {
fErrors.add(new TestFailure(test, t));
for (TestListener each : cloneListeners())
each.addError(test, t);//每个listener接收异常
}
相关文章推荐
- Android源码学习之观察者模式应用
- Android源码学习之观察者模式应用及优点介绍
- Android源码学习之观察者模式应用
- 基于设计模式的学习之旅-----观察者模式(附源码)
- JUnit源码与设计模式欣赏——JUnit学习(三)
- 设计模式学习——观察者模式(Observer Pattern)
- Observer:观察者模式学习
- 学习设计模式第二十二 - 观察者模式
- 设计模式学习笔记——观察者(Observer)模式
- 设计模式学习之——观察者模式
- 步步为营 .NET 设计模式学习笔记 十二、Observer (观察者模式)
- 【笨鸟先飞】Java重新学习日记15--设计模式之观察者模式
- 设计模式学习笔记之观察者模式
- java 设计模式学习笔记(12) - 观察者模式
- 从 Retrofit 源码中学习设计模式(上)
- 设计模式学习笔记---观察者模式Observer pattern(Java版)
- 学习设计模式--观察者模式(C++)
- OpenJDK源码研究笔记(六)--观察者模式工具类(Observer和Observable)和应用示例
- 基于设计模式的学习之旅-----责任链(附源码)
- Android源码学习之模板方法模式应用