2013-01-08-junit命令行启动过程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1: 4.10去除了对Junit3 的支持
2: 不再提供对TestCase 继承的支持,只支持 @Test注解
Junit的用法我这里不说了,很简单,在你要测试的方法上加上@Test注解即可
如果不像执行某个方法,有两种方法,第一种方法是不加@Test注解,第二种方法是加上@Test注解,同时加上@ingnore注解
3:大家现在知道不知道 Junit的执行流程?
用命令行执行junit测试用例跟用eclipse插件这么执行是完全不同的两个流程
命令行:
如果你是经过命令行执行,那么执行的入口在JUnitCore.class这个类里面
这是JunitCore里面的main入口方法
他回去转而调用如下这个方法
JunitCore是junit4的执行入口类,这个类里面能够看到所有的于执行参数有关的发那个方法
最终会调用这个方法进行执行
这个方法大家应该可以看出来,命令行的命令输入的格式如下: java org.junit.runner.JUnitCore (测试类列表,注意使用完整类名)
我们看这个执行方法,
这一行代码
这建立的是一个对类的描述,别小看这个描述,单个测试类的所有信息都在这个描述里面
你可以从这个描述得到执行方法,得到各种注解方法
也就是说,这个描述就是Junit执行的原材料信息,全在里面
那么
这个方法就是继续往下执行的方法
仅仅会执行第一个测试类
其他的不予理睬
看下这个类里面的大致内容
执行到这个地方
我们看一下Request
Request在junit里面是一个比较重要而且有意思的组件
Request 用的是装饰者模式,这个Request装饰 Runner
我们看下不同的装饰者
对case的过滤,排序
下面两个是临时实现的:Request里面定义的一个核心方法,那就是getRunner() ilterRequest则以一个Request和Filter实例为构造参数,在实现getRunner()方法时,根据传入的Request获取Runner,并对改Runner应用传入的Filter以过滤掉那些不需要运行的测试方法;SortingRequest也是以一个Request和Comparator<Description>为构造参数,在实现getRunner()方法是,根据传入的Request获取Runner,并根据comparator构造Sorter 对刚获取到的Runner排序。

我们必须得注意这个 ClassRequest
ClassRequest 的作用就是针对所有的可能的 JunitBuilder 来创建Runner
也就是说他是最先调用的,这是最原生的Runner
我不知道为啥Junit会采取这样的创建方式,而不是先判断 RunWith注解中的Runner类型直接选择
而是每一个都要试一遍
我猜估计是为了编码的一致性和扩展性来考虑的
我们看下这个的源码
这是他的源码,如果是根据@Runwith注解还是对TestCase的继承都会被Build一遍
如果哪个符合了,那么就会返回原生Runner
如果不符合,那么就返回null
然后针对这个原生的Runner,进行一系列的装饰,比如对case重新排序,对case重写过滤方法
HolmosRunner里面就重写了过滤方法
这是HolmosRunner里面的源码
从这里我们能看出用的是装饰者模式
因为所有的Runner都实现了Sort和Filter接口
HolmosRunner和BlockJunit4Runner都是继承了 ParentRunner类
BlockJunit4Runner 这个就是junit4的默认执行Runner
至此我们就已经完成了Runner的生成
一个抽闲的Runner提供了Runner所要的基本方法和字段
接下来的大致流程我给大家说一下
Runner 是来执行Description的,Description里面有了所有的要执行测试类的信息RunNotifier 这个类就好比是一个发射器,不断的进行各种操作的点火,熄火,发送消息。

相关文档
最新文档