junit源码学习--观察者模式
来源:互联网 发布:网络作家真实收入排行 编辑:程序博客网 时间:2024/05/21 07:00
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接收异常
}
- junit源码学习--观察者模式
- Android源码学习之观察者模式应用
- 模式学习:观察者模式
- JUnit源码与设计模式欣赏——JUnit学习(三)
- 观察者模式学习A
- 观察者模式学习B
- 学习日记-观察者模式
- 观察者模式学习
- 观察者模式学习
- 观察者模式学习笔记
- 观察者模式-HeadFirst学习
- 观察者模式巩固学习
- 观察者模式学习
- 观察者模式学习
- Observer:观察者模式学习
- 观察者模式学习笔记
- 观察者模式学习总结
- 观察者模式的学习
- 《算法之美》の链表问题の获得链表中倒数第m个元素
- error 17
- Zend Framework 怎样使用Zend_View与Zend_Layout玩布局?
- java jacob 操作word 文档,进行写操作,如生成表格,添加 图片
- 如何在VC++中调用matlab的求行列式和逆矩阵函数
- junit源码学习--观察者模式
- 2010年5月23日(新公司入职,第七周星期日)
- asp分页显示源代码
- LEDPING1HAO
- 软件设计大赛培训
- 实现 Action
- 21、WindowProperties
- ubuntu下安装pdo扩展
- 22、AutomaticProperties