博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[深入JUnit] 测试运行的入口
阅读量:7107 次
发布时间:2019-06-28

本文共 1411 字,大约阅读时间需要 4 分钟。

阅读前提

  • 了解JUnit

  • 对JUnit的内部实现有兴趣

  • 不妨看看

代码版本: junit 4.12

代码搜索工具:
常用符号

  • _: 用来略去代码段中无关紧要的parameter

  • ...: 用来略去无关紧要的代码实现

本文的展开方式:连续提出问题,通过阅读JUnit源代码回答。

剧透

如果您看了, 里面的BlockJUnit4ClassRunner是通过本文涉及到的,一个叫AllDefaultPossibilitiesBuilder的类,与JUnitCore连接到一起的。JUnitCore是今天的主角!

Q&A

Q1: 比如说我们有一个SampleTest类,如何调用JUnit来运行测试?

A: JUnit有一个JUnitCode的类,他的描述是

JUnitCore is a facade for running tests.

所以,这个是运行测试的一个入口。Facade模式就是把错综复杂的子模块隐藏起来,暴露几个简单的API给用户使用。

source code:

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内部。

Q4: JUnitCore这个类有什么瑕疵么?

A: 这个类所有的methods都是public的,有好几个method的生命让人感觉很费解。作为一个facade类,应该提供尽可能少的,封装良好的方法。但JUnit提供了8个run**的方法,其中runMainrunClasses(Computer, classes)runRequest都应该是protected(package private),因为其中泄露了很多子系统的model概念,例如Request, Computer之类。

Summary

  • JUnitCore是一个facade类,他提供了几个测试入口::main, runClass啥的。

  • AllDefaultPossibilitiesBuilder这个类存了几个默认的Test Runner。常用的BlockJUnit4ClassRunner就在其中

References

  • JUnitCore

  • AllDefaultPossibilitiesBuilder

下期内容

泛泛地了解了JUnit的code path,暂时没兴趣继续深挖了。

接下来,打算转战倡导Mockito。Mockito::mock, Mockito::doReturn这些函数我觉得挺神奇的。

转载于:https://www.cnblogs.com/crazyacking/p/5940173.html

你可能感兴趣的文章
快速了解小程序
查看>>
MongoDB干货篇之数据更新
查看>>
CSS - 纯css实现多行文本溢出省略(兼容所有浏览器)
查看>>
ConcurrentHashMap源码分析_JDK1.8版本
查看>>
Maven 工程实践
查看>>
竹翎(Material风格的APP,附源码)
查看>>
Linux下一些好用的工具
查看>>
源码编译安装nodejs
查看>>
API数据格式转换方法学习
查看>>
对话Pauly Comtois:赫斯特商业媒体中的企业DevOps采用
查看>>
Hybrid App走向“轻混”,剖析WeX5开源高性能HTML5 App开发框架
查看>>
HTTP协议:看个新闻原来这么麻烦
查看>>
精益业务分析宣言解读
查看>>
书评 —— 《Go语言编程》
查看>>
阿里云技术动态:Xen漏洞热补丁修复、异地双活、ODPS新功能与金融互联网
查看>>
Propel: 由Node.js之父创建的JavaScript科学计算库
查看>>
Facebook曝至今最严重安全漏洞,超过5000万用户受影响
查看>>
MySQL 5.7中的更多改进,包括计算列
查看>>
敲山震虎?继MongoDB之后,AWS又对Elasticsearch下手了
查看>>
Facebook计划整合WhatsApp、Instagram和Messenger的基础设施
查看>>