好久没画图了,看下这个序列图,还算比较清晰的:

以textui来分析:

Test

顶层接口。TestSuite和TestCase均实现此接口,在具体执行的时候面向此接口编程,弱化类型,实现各自的执行流程。

TestSuite中的run方法:

public void run(TestResult result) {for (Enumeration e= tests(); e.hasMoreElements(); ) {if (result.shouldStop() )break;Test test= (Test)e.nextElement();runTest(test, result);}
}public void runTest(Test test, TestResult result) {test.run(result);
}

如果当前Test是TestSuite类型的,上面的runTest将会继续调用其上的run方法,遍历其维护的Test集合,如果遍历的是TestCase,将走常规路线,否则依旧。

这样就相当于由树到叶的过程,最终的run在叶节点。

TestRunner

测试运行类。

启动测试用例

通过调用BaseTestRunner的getTest方法来获取TestSuite。

TestSuite

测试集合类

构建用户自定义的测试集合。将一组方法整合在一起来测试,自定义组合。如果用户不定义suite方法来创建Testsuite,框架默认生成一个,包含所有的测试方法(TestCase)。

Method suiteMethod= null;
try {suiteMethod= testClass.getMethod(SUITE_METHODNAME, new Class[0]);
} catch(Exception e) {// try to extract a test suite automaticallyclearStatus();return new TestSuite(testClass);
}

如果我们自己来构建就是这样:

public static Test suite(){TestSuite suite = new TestSuite();// 自定义类集合suite.addTestSuite(DemoTest.class);suite.addTestSuite(DemoTwoTest.class);return suite;
}

跟踪一下addTestSuite方法:

public void addTestSuite(Class testClass) {addTest(new TestSuite(testClass));
}public void addTest(Test test) {fTests.addElement(test);
}

这个过程可以让顶层的TestSuite包含两个子TestSuite,一个是关于DemoTest的,另一个是DemoTwoTest,两者又包含了各自的TestCase。

TestCase

测试用例类

为每个测试方法创建一个TestCase。包含一个最本质的run方法,仅仅持有该方法的名称,利用反射来调用测试方法。

/*** Runs the test case and collects the results in TestResult.*/
public void run(TestResult result) {result.run(this);
}

TestCase的run方法会调用TestResult的run

TestResult

测试结果类

维护测试结果。最基本的测试方法最终都会在这里运行,方便统计结果。

/*** 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);
}/*** 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 accidentthrow e;}catch (Throwable e) {addError(test, e);}
}

TestResult的run又反过来调用TestCase的runBare

转载于:https://www.cnblogs.com/lucare/p/8679137.html

Junit3.8源码--核心类相关推荐

  1. mysql代码的核心类_mysql源码---核心类 (1)线程类

    线程是mysql一个很重要的概念.线程用来处理来自客户端的连接,线程和连接是1:1的关.线程和THD对象也是1:1对应的关系,有些线程会被设置为优先,而有些线程没有优先级,而线程的优先级设置在sql/ ...

  2. java int类源码,一起学JDK源码 -- Integer类

    Integer类为java基本类型int的包装类,除了前面提到的Byte类,Short类中的大部分方法,Integer类中还提供了很多处理int类型的方法,接下来就让我们一起看看吧. 基础知识: 1. ...

  3. 以前写的网页游戏辅助工具源码 传奇类的HOOK 封包 按钮

    以前写的网页游戏辅助工具源码 传奇类的HOOK 封包 按钮. 限量出源码,有需要的 116327160

  4. Spring源码工具类ClassUtils之isAssignable

    Spring源码工具类ClassUtils之isAssignable 文章目录 Spring源码工具类ClassUtils之isAssignable 一.isAssignable 二.代码示例 一.i ...

  5. 深入源码解析类Route

    微软官网对这个类的说明是:提供用于定义路由及获取路由相关信息的属性和方法.这个说明已经很简要的说明了这个类的作用,下面我们就从源码的角度来看看这个类的内部是如何工作的. 1 public class ...

  6. 分析ThinkPHP5的源码(1) : 类的自动加载

    前文 Composer 下载ThinkPHP5.1的源码,每个框架它都必须都有一个"类的自动加载"机制 ,我们都知道PHP引入文件是需要require . include 才能使用 ...

  7. 【Linux 内核】实时调度类 ③ ( 实时调度类 rt_sched_class 源码 | 调度类 sched_class 源码 )

    文章目录 一.调度类 ( 停机调度类 | 限期调度类 | 实时调度类 | 公平调度类 | 空闲调度类 ) 二. 实时调度类 rt_sched_class 源码 一.调度类 ( 停机调度类 | 限期调度 ...

  8. 用Enterprise Architect从Java源码生成类图

    1.project---new project 建立工程,会弹出配置框,选择要包含的图形,只是分析代码结构,选择'class'类图即可(如下图),完成工程建立. 2.在右侧Project Browse ...

  9. JDK源码——UnSafe类

    一.摘要 juc中大部分类都是依赖于Unsafe来实现的,主要用到了Unsafe中的CAS.线程挂起.线程恢复等相关功能.所以如果打算深入了解JUC原理的,必须先了解一下Unsafe类. Unsafe ...

最新文章

  1. NSNotification先注册监听,再发送消息
  2. c获取当前系统时间_Python系统:程序和进程
  3. 如何用matlab分析chipscope的数据
  4. C语言插入排序Insertion Sort算法(附完整源码)
  5. httpclient 设置短连接_HTTP长连接、短连接使用及测试
  6. 容器学习 之 限制容器资源(十一)
  7. Java8 实战系列-02-lambda 表达式简介
  8. windows10安装oracle10 g客户端
  9. Element UI的数据表格数据检索方法
  10. 最新Oracle官网JDK 8.0的下载
  11. DSP CCS3.3安装问题与解决方案
  12. POJO 与javaBean(普通bean和EJB)
  13. 如果我有一颗私人卫星……|潮科技有奖问答评论精选 ②
  14. HTML界的“苏炳添”——详解Canvas优越性能和实际应用
  15. c语言char a 4,char a:4;是什么意思C++
  16. 116.s1-黑名单设置的优化(封装BaseAdapter的方法)
  17. windows10连接共享打印机显示“0x0000011b”错误的解决方法
  18. Java、JSP商场管理系统
  19. 解决ubuntu14.04安装mongodb安装失败
  20. matlab选哪几个产品,MATLAB产品大全

热门文章

  1. 聚合登录平台网站源码 PHP聚合登录源码
  2. DBX到PDF转换器
  3. c语言编译时间,C语言中关于时间的函数
  4. 苹果cmsV10高仿草民电影网在线影视网站模板 带手机版
  5. 开单大师(开源可定制的房产管理系统) v3.6.9学习版
  6. Magento教程 6:商店设定与参数
  7. 【必备】史上最全的浏览器 CSS JS Hack 手册
  8. 对于String类型的深刻理解
  9. 5款WordPress推荐文章幻灯片插件
  10. 关于栈的链式存储结构