JUnit4.8.2源代码分析-3.2 Computer

本系列文章,记录yqj2065阅读JUnit源代码的过程,很多时候在阅读过程中有许多不理解的地方,例如某某类是干什么的,为什么需要它,为什么不这样设计……等等。

org.junit.runner是JUnit最核心的包,其中的Computer/计算机(是这样翻译么),它是个什么意思呢?刚开始读JUnitCore的时候,我就很不明白。

package org.junit.runner;

import org.junit.runners.Suite;
import org.junit.runners.model.InitializationError;
import org.junit.runners.model.RunnerBuilder;
import org.junit.runner.Runner;

/**
 * Represents a strategy for computing runners and suites.
 * WARNING: this class is very likely to undergo serious changes in version 4.8 and
 * beyond.
 */
public class Computer {
	/**
	 * Returns a new default computer, which runs tests in serial order
	 */
	public static Computer serial() {
		return new Computer();
	}

	/**
	 * Create a suite for {@code classes}, building Runners with {@code builder}.
	 * Throws an InitializationError if Runner construction fails
	 */
	public Runner getSuite(final RunnerBuilder builder,
			Class<?>[] classes) throws InitializationError {
		return new Suite(new RunnerBuilder() {
			@Override
			public Runner runnerForClass(Class<?> testClass) throws Throwable {
				return getRunner(builder, testClass);
			}
		}, classes);
	}

	/**
	 * Create a single-class runner for {@code testClass}, using {@code builder}
	 */
	protected Runner getRunner(RunnerBuilder builder, Class<?> testClass) throws Throwable {
		return builder.runnerForClass(testClass);
	}
}

其实,如果把它叫作RunnerFactory,我就会秒懂。

更进一步,如果不考虑它的子类org.junit.experimental.ParallelComputer,可以将Computer的两个方法定义为static。

多么标准的静态工厂。

又一个问题,Computer与org.junit.runners.model.RunnerBuilder为什么是使用关系而非继承关系?Computer仅仅作为RunnerBuilder的前台?

总之,在目前阶段,我把Computer看成一个工厂。

时间: 2024-08-06 11:52:39

JUnit4.8.2源代码分析-3.2 Computer的相关文章

JUnit4.8.2源代码分析-2 org.junit.runner.Request和Description

JUnit4.8.2源代码中,最令yqj2065感兴趣的是org.junit.runner.Request,它是几个意思呢? ①封装JUnit的输入 JUnit4作为信息处理单元,它的输入是单元测试类--布满各种JUnit4的RUNTIME标注的类,但由于使用反射机制,JUnit4的输入严格地说是一个或多个(组)单元测试类的Class对象.早期版本的JUnit主要处理一个测试或测试构成的树,在增添了对过滤/ filtering和排序/ sorting支持后,JUnit4加入了这个概念.毕竟按照1

JUnit4.8.2源代码分析-1说明

由于yqj2065下载使用的BlueJ集成的是JUnit4.8.2,所以就分析一下JUnit4.8.2的源代码. JUnit是由GOF 之一的Erich Gamma 和 Kent Beck 编写的一个开源的单元测试框架,分析JUnit源代码的主要目的是学习其中对设计模式的运用.JUnit也是一个研究如何应对版本升级和接口变化的案例. 阅读源代码,首先需要知道该框架的设计需求.如果使用过JUnit,单元测试的需求应该比较熟悉.从简单的例子入手,有应用程序(待测试的类)HelloWorld,为了使用

JUnit4.8.2源代码分析-4 RunNotifier与RunListener

JUnit4执行过程中,org.junit.runner.notification. RunListener和RunNotifier运用了观察者模式. 1.观察者 观察者Observer/Listener主要作用是分析各种事件并定义相应的回调接口.例如JDK中MouseListener处理鼠标键相关的5个动作:鼠标键被按下/pressed.释放/released.单击/clicked.光标进入或离开某组件/enters or exits.java.awt.event .MouseListener

JUnit4.8.2源代码分析-5 Statement

org.junit.runners.model.Statement/语句是对运行JUnit测试组过程中的一个或多个动作的封装.如果说Runner.run()表示运行JUnit测试组的整个过程,则Statement表示其中或大或小的步骤.针对方法的标注如@Test .@Before.@After.@BeforeClass.@AfterClass具有某些执行的顺序,Statement是整个过程的一个步骤结点,而诸多Statement构成的链式结构表达了整个过程.在各种Runner中广泛使用它们. o

JUnit4.8.2源代码分析-3 TestClass 和RunnerBuilder

吃柿子专挑软的捏.JUnit4的核心是org.junit.runner.Runner,它涉及的类型太多,今天看几个简单的类型.看完了而且不准备回头再看的类型,yqj2065会在BlueJ中将它删除.删除如NullBuilder时,将import org.junit.internal.builders.NullBuilder加到本包的它的客户类中(其他包使用的,是BlueJ库中引入的包文件中的类),以保证整个项目可以编译和生成JavaDoc. org.junit.runners.model.Tes

JUnit4.8.2源代码分析-3.1 Description-测试树

重新把org.junit.runner.Description的源代码读了一下,结合成组测试(Suite)了解Description所表示的测试树. Description使用组合模式描述一个测试的信息.所有元素都是Composite对象. 例如myTest.units包中有Unit1.Unit2.Unit3,而SuiteUnit将Unit2.Unit3和myTest.param.ParametTestUnit组成一组.     public static void tree(){      

JUnit4.8.2源代码分析-6.1 排序和过滤

Runner.sort.Request.sortWith和Sorter.apply yqj2065都快被它们搞死了. Sorter.apply().Request.sortWith()和Sortable.sort()三者做一件事情?为什么呢? java.util.Comparator接口是一个策略类,定义了int compare(T o1, T o2)方法.org.junit.runner.manipulation.Sorter implements Comparator<Description

JUnit4.8.2源代码分析-5.1 Statement之复合命令

抽象类Statement作为命令模式的Command,只有一个方法public abstractvoid evaluate() throws Throwable; 作为命令模式的Invoker的各种Runner,将发出各种Statement并以它们表示运行JUnit测试组的整个过程.针对方法的标注如@Test .@Before.@After.@BeforeClass.@AfterClass和各种测试场景,JUnit在org.junit.internal.runners.statements包中定

【JUnit4.10源代码分析】0导航

JUnit是由GOF 之一的Erich Gamma和 Kent Beck 编写的一个开源的单元测试框架,yqj2065分析JUnit源代码的主要目的是 学习其中对设计模式的运用. JUnit也是一个学习Java编程. 学习框架设计 和研究如何应对版本升级和接口变化的案例. NetBeans IDE 7.4 (Build 201310111528) 的测试库为JUnit4.10,因而在前面对JUnit4.8.2源代码分析的基础上,yqj2065将采用较正规的方式介绍JUnit4.10源代码. 10