资讯专栏INFORMATION COLUMN

[深入JUnit] 测试运行的入口

godlong_X / 1987人阅读

摘要:剧透如果您看了深入的秘密,里面的是通过本文涉及到的,一个叫的类,与连接到一起的。是今天的主角比如说我们有一个类,如何调用来运行测试有一个的类,他的描述是所以,这个是运行测试的一个入口。接下来,打算转战倡导。

阅读前提

了解JUnit

对JUnit的内部实现有兴趣

不妨看看[深入JUnit] @Before, @After, @Test的秘密]

代码版本: 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**的方法,其中runMainrunClasses(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这些函数我觉得挺神奇的。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/8730.html

相关文章

  • [深入JUnit] 测试运行入口

    摘要:剧透如果您看了深入的秘密,里面的是通过本文涉及到的,一个叫的类,与连接到一起的。是今天的主角比如说我们有一个类,如何调用来运行测试有一个的类,他的描述是所以,这个是运行测试的一个入口。接下来,打算转战倡导。 showImg(https://segmentfault.com/img/bVtSbH); 阅读前提 了解JUnit 对JUnit的内部实现有兴趣 不妨看看[深入JUnit] @...

    springDevBird 评论0 收藏0
  • [深入JUnit] @Before, @After, @Test秘密

    摘要:最近对和的内部实现比较感兴趣,将在接下来的一段时间,和大家一起深入代码细节。利用原生的和,可以轻松地得到测试类中函数的。下期内容又被谁调用了呢运行的入口在哪里请看深入测试运行的入口 最近对JUnit和Mockito的内部实现比较感兴趣,将在接下来的一段时间,和大家一起深入代码细节。 王侯将相,宁有种乎 (JUnit也没啥Magic吧) 阅读前提 听说过Java Annotation ...

    dongfangyiyu 评论0 收藏0
  • junit4备忘录

    摘要:它由和建立,逐渐成为源于的的家族中最为成功的一个。与添加进入的的依赖中。具有两个参数可选该测试方法允许执行的最大时间长度。单位捕获抛出的异常。这个类不包含任何方法更改入口类的测试运行器为将要运行的测试类作为数组传入到中。 简介 JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为...

    TZLLOG 评论0 收藏0
  • Android自动化测试-从入门到入门(2)Testing APIs

    摘要:标识一个测试方法。附录自动化测试从入门到入门自动化测试从入门到入门自动化测试从入门到入门入门自动化测试从入门到入门自动化测试从入门到入门的测试自动化测试从入门到入门会玩的自动化测试从入门到入门 根据该系列文章的第一篇:Hello Testing,大家已经对整个自动化测试运行流程有了一个基本的了解,接下来我们该集中精力关注具体的脚本实现了!在具体实现之前,我们先来了解一下Android提...

    Meathill 评论0 收藏0
  • Android自动化测试-从入门到入门(2)Testing APIs

    摘要:标识一个测试方法。附录自动化测试从入门到入门自动化测试从入门到入门自动化测试从入门到入门入门自动化测试从入门到入门自动化测试从入门到入门的测试自动化测试从入门到入门会玩的自动化测试从入门到入门 根据该系列文章的第一篇:Hello Testing,大家已经对整个自动化测试运行流程有了一个基本的了解,接下来我们该集中精力关注具体的脚本实现了!在具体实现之前,我们先来了解一下Android提...

    littleGrow 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<