JUnit4.8.2来源分析-2 org.junit.runner.Request
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的更多相关文章
- JUnit org.junit.runner.Request.classWithoutSuiteMethod解决方法
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- JUnit4.8.2来源分析-6.1 排序和过滤
Runner.sort.Request.sortWith和Sorter.apply yqj2065很快,他们搞死. Sorter.apply().Request.sortWith()和Sortable ...
- 【JUnit4.10源码分析】3.4 Description与測试树
Description使用组合模式描写叙述一个測试树.组合模式中全部元素都是Composite对象. Description有成员变量private final ArrayList<Descri ...
- 【JUnit4.10来源分析】6 Runner
org.junit.runner.Runner它是JUnit作业引擎.它在许多类型的支持下的.处理试验和生产(Description).Failure和Result和其它输出. Runner参见图主类 ...
- 【JUnit4.10源码分析】6.1 排序和过滤
abstract class ParentRunner<T> extends Runner implements Filterable,Sortable 本节介绍排序和过滤. (尽管JUn ...
- 【JUnit4.10源码分析】5.2 Rule
标注@Rule TestRule是一个工厂方法模式中的Creator角色--声明工厂方法. package org.junit.rules; import org.junit.runner.Descr ...
- 1.Android JUnit Runner(使用AndroidStudio)
一.Android JUnit Runner介绍 1.Android JUnit Runner 1)是一个测试运行器,用于运行Junit3和Junit4的Android测试包 2)替换Instrume ...
- java.lang.NoClassDefFoundError: org/junit/runner/manipulation/Filter
今天想写个随笔,最近经常遇到使用junit的时候报java.lang.NoClassDefFoundError,今天算是恍然大悟了,原来junit虽然在gradle里面配置了,也在Project an ...
- Java-Class-@I:org.junit.runner.RunWith
ylbtech-Java-Class-@I:org.junit.runner.RunWith 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 1. package org.juni ...
随机推荐
- 在小发现SQL字符串比较是不是他们的大写和小写敏感
声明:select petName from dbo.T_pet order by petName desc 成绩: petName An admin A的ascii码小于a,按理说应该 ...
- C++学习笔记9-运算符重载
1. 重载运营商必须有一个类类型的操作数 对于内置类型运营商.它的意义不能改变. 例如,内置整数加法运算不能被重新定义: // error: cannotredefine built-in opera ...
- OllyDbg 使用注意事项 (十)
OllyDbg 用笔记 (十) 參考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 演示样例程序下载地址:http://pan.baidu.com/s/1kT1ce83 这个程序能够从 ...
- linux根据该文件夹的读取权限和权限运行差异
假设你linux下使用ls.细心的你会发现居然夹有权限运行.例如: drwxrwxr-x 11 cl cl 4096 9 25 14:22 ./ drwxr-xr-x 49 cl cl 4096 1 ...
- Redis 的性能
Redis 的性能幻想与残酷现实 2011 年,当初选择 Redis 作为主要的内存数据存储,主要吸引我的是它提供多样的基础数据结构可以很方便的实现业务需求.另一方面又比较担心它的性能是否足以支撑,毕 ...
- PHP第七课 使用方法数组2
学习平台: 1.了解数组函数 2.输出随机验证码 1.数组函数: 数组函数: //作用:提供了非常多官方写的非常实用的代码段,提高编写速度. 1.数组的键值操作函数 2.统计数组的元素和唯一性 3.使 ...
- flashfxp3.41中文版注册码:(适合最新版本)
推荐(尚未被封的 Realkey) FLASHFXPvACq2ssbvAAAAAC1W7cJKQTzmx77zmqJICvA7d3WnU tWNXdrp8YuERRFdIvXfOPbcpABkVix2 ...
- spring集成quartz
spring集成quartz 注意:出现异常"Caused by: java.lang.IncompatibleClassChangeError: class org.springframe ...
- SDUT 2894-C(最短spfa)
C Time Limit: 7000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描写叙述 给出一个带权无向图.包括n个点,m条边.求出s,e的最短路.保证最短路存在 ...
- LinuxDLL加载优化方案
作者:zhanhailiang 日期:2014-10-26 linux程序动态库载入流程简单介绍 linux从程序(program或对象)变成进程(process或进程),简单说来须要经过三步: fo ...