[深入JUnit] 测试运行的入口
阅读前提
了解JUnit
对JUnit的内部实现有兴趣
代码版本: junit 4.12
代码搜索工具: http://grepcode.com/
常用符号
_
: 用来略去代码段中无关紧要的parameter...
: 用来略去无关紧要的代码实现
本文的展开方式:连续提出问题,通过阅读JUnit源代码回答。
剧透
如果您看了[深入JUnit] @Before, @After, @Test的秘密], 里面的BlockJUnit4ClassRunner
是通过本文涉及到的,一个叫AllDefaultPossibilitiesBuilder
的类,与JUnitCore
连接到一起的。JUnitCore是今天的主角!
Q&A
Q1: 比如说我们有一个SampleTest
类,如何调用JUnit来运行测试?
A: JUnit有一个JUnitCode的类,他的描述是
JUnitCore is a facade for running tests.
所以,这个是运行测试的一个入口。Facade模式就是把错综复杂的子模块隐藏起来,暴露几个简单的API给用户使用。
source code:
http://grepcode.com/file/repo1.maven.org...
Q2: 哪该使用JUnitCore的那个函数?
A: 瞄一眼JUnitCore,有一个main函数。大喜
public static void main(String... args) {
Result result = new JUnitCore().runMain(new RealSystem(), args);
System.exit(result.wasSuccessful() ? 0 : 1);
}
Q3: JUnitCore#runMain
内部有什么有意思的要看的东西?
A: JUnitCore#runMain
最终落脚到org.junit.runner.Runner#run这个函数。runner是如何决定的?请看org.junit.internal.builders.AllDefaultPossibilitiesBuilder
内部。
http://grepcode.com/file/repo1.maven.org...
Q4: JUnitCore
这个类有什么瑕疵么?
A: 这个类所有的methods都是public的,有好几个method的生命让人感觉很费解。作为一个facade类,应该提供尽可能少的,封装良好的方法。但JUnit
提供了8个run**的方法,其中runMain
,runClasses(Computer, classes)
,runRequest
都应该是protected(package private),因为其中泄露了很多子系统的model概念,例如Request
, Computer
之类。
Summary
JUnitCore是一个facade类,他提供了几个测试入口
::main
,runClass
啥的。AllDefaultPossibilitiesBuilder
这个类存了几个默认的Test Runner。常用的BlockJUnit4ClassRunner
就在其中
References
JUnitCore
http://grepcode.com/file/repo1.maven.org...
http://grepcode.com/file/repo1.maven.org...AllDefaultPossibilitiesBuilder
http://grepcode.com/file/repo1.maven.org...
下期内容
泛泛地了解了JUnit的code path,暂时没兴趣继续深挖了。
接下来,打算转战倡导Mockito。Mockito::mock, Mockito::doReturn这些函数我觉得挺神奇的。
[深入JUnit] 测试运行的入口的更多相关文章
- junit 测试套件Suite
junit测试套件,就是可以运行一个测试类使得一个或一些测试类被junit测试运行 见代码: 测试套件类: import org.junit.runner.RunWith; import org.ju ...
- JUnit扩展:引入新注解Annotation
发现问题 JUnit提供了Test Suite来帮助我们组织case,还提供了Category来帮助我们来给建立大的Test Set,比如BAT,MAT, Full Testing. 那么什么情况下, ...
- junit源码解析--初始化阶段
OK,我们接着上篇整理.上篇博客中已经列出的junit的几个核心的类,这里我们开始整理junit完整的生命周期. JUnit 的完整生命周期分为 3 个阶段:初始化阶段.运行阶段和结果捕捉阶段. 这篇 ...
- Junit 测试集(打包测试)实例
测试集,直译过来的意思就是把测试集合起来,再详细一些就是把多个单元测试集合起来 .单元测试可以理解为:单个接口 或者单个类/方法 的测试 项目背景:测试基于spring开发的项目代码 实例模板:pac ...
- JUnit4源码学习笔记
先上一个在Spring-test下运行的调用栈 自底向上: JUnitStarter IDEA对JUnit的支持,调用JUnitCore.run(Runner),将注解@RunWith指定的Runne ...
- SSH的Eclips环境搭建
一.创建数据库名字为:dungouoa create database dungouoa default character set utf8; mysql> show create datab ...
- 【SSH框架】之Hibernate系列一
微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.Hibernate框架概述 (1).什么是HibernateHibernate是一个开放源代 ...
- UiAutomator1.0 与 UiAutomator2.0
在使用2.0之前,对android自动化框架也做过一些了解<Android 自动化测试框架>.使用UiAutomator2.0也有一段时间,这里将1.0与2.0进行一个对比总结. Ui ...
- Ping++支付
第一次接触支付啊,有点小激动,所以写下这篇随笔以防以后忘记. ping++的文档还有服务都是挺好的,当你注册之后,就会给你发邮件.截图如下: 是不是感觉服务很不错. 接下来直入正题. 首先,我们需要加 ...
随机推荐
- [APUE]UNIX进程的环境(上)
一. 前言 本章将学习:当执行程序时,其main函数是如何被调用的,命令行参数是如何传送给执行程序的,典型的存储器布局是什么样式,如何分配另外的存储空间,进程如何使用环境变量,进程终止的不同方式等.另 ...
- ZKWeb网页框架1.2正式发布
发行日志 https://github.com/zkweb-framework/ZKWeb/blob/master/ReleaseNotes/ReleaseNote.1.2.md 主要改动 更新 ZK ...
- .NET同步与异步之相关背景知识(六)
在之前的五篇随笔中,已经介绍了.NET 类库中实现并行的常见方式及其基本用法,当然.这些基本用法远远不能覆盖所有,也只能作为一个引子出现在这里.以下是前五篇随笔的目录: .NET 同步与异步之封装成T ...
- 【Java每日一题】20170103
20161230问题解析请点击今日问题下方的"[Java每日一题]20170103"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 页面布局class常见命名规范
头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中:left rig ...
- 从国内流程管理软件市场份额看中国BPM行业发展
随着互联网+.中国制造2025.工业4.0等国家战略的支持与引导,企业在数字经济时代的信息化表现惊人,越来越多企业认识到,对于企业的发展来说,信息自动化远远还不够,企业的战略.业务和IT之间需保持高度 ...
- CentOS:ECDSA host key "ip地址" for has changed and you have requested strict checking(转)
原文地址:http://blog.csdn.net/ausboyue/article/details/52775281 Linux SSH命令错误:ECDSA host key "ip地址& ...
- Vue.js——基于$.ajax实现数据的跨域增删查改
概述 之前我们学习了Vue.js的一些基础知识,以及如何开发一个组件,然而那些示例的数据都是local的.在实际的应用中,几乎90%的数据是来源于服务端的,前端和服务端之间的数据交互一般是通过ajax ...
- 用SSH访问内网主机的方法
如今的互联网公司通常不会直接自己直接配主机搭建服务器了,而是采用了类似阿里云的这种云主机,当应用变得越来越大了之后,就不可避免地增加主机,而出于成本考虑,不可能给每一台主机都分配公网带宽,所以实际的情 ...
- FreeBinary 格式说明
说明 简称FB格式,是一个简单的二进制文件打包格式. 作用是FBX.unity.js等交换的一个中间格式. 由李剑英制定,易于读取,易于扩展 相应的代码可以用svn取得 SVN:http://code ...