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

简介: 阅读前提 了解JUnit 对JUnit的内部实现有兴趣 不妨看看[深入JUnit] @Before, @After, @Test的秘密] 代码版本: junit 4.12代码搜索工具: http://grepcode.com/常用符号 _: 用来略去代码段中无关紧要的parameter ...: 用来略去无关紧要的代码实现 本文的展开方式:连续提出问题,通过阅读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**的方法,其中runMainrunClasses(Computer, classes)runRequest都应该是protected(package private),因为其中泄露了很多子系统的model概念,例如Request, Computer之类。

Summary

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

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

References

下期内容

泛泛地了解了JUnit的code path,暂时没兴趣继续深挖了。
接下来,打算转战倡导Mockito。Mockito::mock, Mockito::doReturn这些函数我觉得挺神奇的。

目录
相关文章
|
4月前
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
|
1月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
122 1
|
2月前
|
测试技术 Python
自动化测试项目学习笔记(一):unittest简单运行(初始化,清除,设置测试行为)
本文介绍了Python的unittest框架的基础用法,包括测试初始化(setup)、清除(tearDown)函数的使用,以及assertEqual和assertGreaterEqual等断言方法,并展示了如何创建测试用例,强调了测试函数需以test_开头才能被运行。
69 1
自动化测试项目学习笔记(一):unittest简单运行(初始化,清除,设置测试行为)
|
2月前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
34 5
|
2月前
|
SQL 分布式计算 NoSQL
大数据-170 Elasticsearch 云服务器三节点集群搭建 测试运行
大数据-170 Elasticsearch 云服务器三节点集群搭建 测试运行
50 4
|
3月前
|
SQL JavaScript 前端开发
基于Java访问Hive的JUnit5测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Java、来开发Hive应用的方法,产生的代码如下
81 6
|
4月前
|
测试技术
单元测试问题之使用TestMe时利用JUnit 5的参数化测试特性如何解决
单元测试问题之使用TestMe时利用JUnit 5的参数化测试特性如何解决
59 2
|
4月前
|
Cloud Native 数据处理
项目环境测试问题之当异步任务在运行过程中抛出非预期的异常会导致后果如何解决
项目环境测试问题之当异步任务在运行过程中抛出非预期的异常会导致后果如何解决
|
5月前
|
Java 测试技术 数据库
单元测试问题之LoginServiceImpl以避免对IpUtil的依赖问题如何解决
单元测试问题之LoginServiceImpl以避免对IpUtil的依赖问题如何解决
|
4月前
|
Linux C#
【Azure App Service】C#下制作的网站,所有网页本地测试运行无误,发布至Azure之后,包含CHART(图表)的网页打开报错,错误消息为 Runtime Error: Server Error in '/' Application
【Azure App Service】C#下制作的网站,所有网页本地测试运行无误,发布至Azure之后,包含CHART(图表)的网页打开报错,错误消息为 Runtime Error: Server Error in '/' Application