JUnit4.8.2源代码,最为yqj2065兴趣是org.junit.runner.Request,现在是几点意味着它?

①封装JUnit的输入

JUnit4作为信息处理单元,它的输入是单元測试类——布满各种JUnit4的RUNTIME标注的类,但因为使用反射机制,JUnit4的输入严格地说是一个或多个(组)单元測试类的Class对象。早期版本号的JUnit主要处理一个測试或測试构成的树,在增添了对过滤/
filtering和排序/ sorting支持后,JUnit4增加了这个概念。毕竟依照1.2.4 Java Annotation 提要的直接使用反射机制方式。代码会非常复杂。

②知子莫若父??

面向对象中。一般父类不知其子类。然而在这里我们看见了反例。

BlueJ中生成的JavaDoc

父类何时应该知道子类?这是一个问题,我仅仅记得在WCF中遇到过数据契约中有个KnownType的东西。Request源码中import其各个子类,并在一系列静态方法中使用它们而返回Request对象。Request是一个抽象类,通过静态方法返回Request(的子类) 的对象,这究竟得和new有多大的仇恨啊。只是我喜欢。

这些静态方法我不称其为静态工厂

public static Request aClass(Class<?

> clazz)

public static Request classWithoutSuiteMethod(Class<?> clazz)

public static Request classes(Computer computer, Class<?>... classes)

public static Request classes(Class<?>...classes)

public static Request runner(final Runner runner)

public static Request method(Class<?> clazz, String methodName) {

Description method= Description.createTestDescription(clazz,methodName);

return Request.aClass(clazz).filterWith(method);

}

Request.method()将一个@Test封装为Request,毕竟@Test是基础。【HelloWorld 的单元測试类TestInJUnit4见源码分析-1

例程 8-3測试Request类
package myTest;
import org.junit.runner.*;
public class RequestDemo{
public static void test()throws Exception{
Request rqst = Request.method(TestInJUnit4.class,"add");
Result r = new JUnitCore().run(rqst);
System.out.println(r.wasSuccessful() );
}
}

③Request运用了工厂方法模式。

Request有一个工厂方法:public abstractRunner getRunner();

并且Request的设计有一个奇异的地方:在创建对象的时候似乎使用装饰模式?Request为装饰模式中的Component、org.junit.internal.request.ClassRequest为详细组件,而FilterRequest和SortingRequest为详细装饰者(没有抽象Decorator)。而这一切,目的却是为了构建Request相关的Runner。

④Request使用set串接模式

Request的其它非静态方法filterWith、sortWith能够视为set方法。

Request.method()中给出了样例:

return Request.aClass(clazz).filterWith(method);

本文涉及的类型:Request及其3个子类,Description;涉及的设计模式:工厂方法模式、set串接模式、装饰模式

相关的类型:Runner、AllDefaultPossibilitiesBuilder、Filter等一下。

版权声明:本文博主原创文章,博客,未经同意不得转载。

JUnit4.8.2来源分析-2 org.junit.runner.Request的更多相关文章

  1. JUnit org.junit.runner.Request.classWithoutSuiteMethod解决方法

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  2. JUnit4.8.2来源分析-6.1 排序和过滤

    Runner.sort.Request.sortWith和Sorter.apply yqj2065很快,他们搞死. Sorter.apply().Request.sortWith()和Sortable ...

  3. 【JUnit4.10源码分析】3.4 Description与測试树

    Description使用组合模式描写叙述一个測试树.组合模式中全部元素都是Composite对象. Description有成员变量private final ArrayList<Descri ...

  4. 【JUnit4.10来源分析】6 Runner

    org.junit.runner.Runner它是JUnit作业引擎.它在许多类型的支持下的.处理试验和生产(Description).Failure和Result和其它输出. Runner参见图主类 ...

  5. 【JUnit4.10源码分析】6.1 排序和过滤

    abstract class ParentRunner<T> extends Runner implements Filterable,Sortable 本节介绍排序和过滤. (尽管JUn ...

  6. 【JUnit4.10源码分析】5.2 Rule

    标注@Rule TestRule是一个工厂方法模式中的Creator角色--声明工厂方法. package org.junit.rules; import org.junit.runner.Descr ...

  7. 1.Android JUnit Runner(使用AndroidStudio)

    一.Android JUnit Runner介绍 1.Android JUnit Runner 1)是一个测试运行器,用于运行Junit3和Junit4的Android测试包 2)替换Instrume ...

  8. java.lang.NoClassDefFoundError: org/junit/runner/manipulation/Filter

    今天想写个随笔,最近经常遇到使用junit的时候报java.lang.NoClassDefFoundError,今天算是恍然大悟了,原来junit虽然在gradle里面配置了,也在Project an ...

  9. Java-Class-@I:org.junit.runner.RunWith

    ylbtech-Java-Class-@I:org.junit.runner.RunWith 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部 1. package org.juni ...

随机推荐

  1. MySql之ALTER命令用法详细解读(转)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细解读了MySql语法中Alter命令的用法,这是一个用法比较多的语法,而且功能还是很强 ...

  2. mapreduce程序来实现分类

    文件的内容例如以下所看到的: 5 45 8 876 6 45 要求最后的输出格式: 1    5 2    6 3    8 4    45 5    45 5    876 首先,这个题目是须要对文 ...

  3. WPF 绑定

    WPF里分三种Binding:Binding, PriorityBinding, MultiBinding,这三种Binding的基类都是BindingBase,而BindingBase又继承于Mar ...

  4. redmine忘记username和password

    环境: Ubuntu 13.10 bitnami-redmine-2.5.1-1-linux-x64-installer.run 用bitnami安装完redmine以后,有是否忘记了username ...

  5. 使用dfs实现1至n全阵列

    使用dfs实现1至n全阵列. 我的方法是从所述第一位置开始,使用dfs看上去就像每个头号位置, 当某个位置.从小到大枚举1至n所有号码,打假说 尚未使用之前在这个位置上的几个选择这个号码.然后搜索下 ...

  6. 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern)

    原文:乐在其中设计模式(C#) - 备忘录模式(Memento Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern) 作者:webabc ...

  7. C++结构体之统计最高最低分

    [Submit][Status][Web Board] Description 输入学生的姓名和成绩,统计出最高分的学生和最低分的学生. Input 输入5个学生的姓名和分数,用结构体完成 Outpu ...

  8. iOS 辛格尔顿

    单例模式: 为什么使用单例,单例模式的用途是什么?以下我们举一个样例来诠释一下 举个大家都熟知的样例--Windows任务管理器,如图,我们能够做一个这种尝试,在Windows的"任务栏&q ...

  9. 【C语言探索之旅】 第二部分第九课: 实战"悬挂小人"游戏 答案

    内容简介 1.课程大纲 2.第二部分第九课: 实战"悬挂小人"游戏 答案 3.第二部分第十课预告: 安全的文本输入 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题, ...

  10. cassandra 服务启动流程

    cassandra 服务启动流程 1.  setup 1)   CassandraDaemon ->main publicstaticvoidmain(String[]args) { insta ...