博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JUnit4.8.2来源分析-2 org.junit.runner.Request
阅读量:6276 次
发布时间:2019-06-22

本文共 1884 字,大约阅读时间需要 6 分钟。

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

①封装JUnit的输入

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

②知子莫若父??

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

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见】

例程 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等一下。

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

你可能感兴趣的文章
第五届全球游戏开发者大会暨天府奖盛典18日盛大开幕
查看>>
融了1000万,只为让它们好好吃饭!
查看>>
Debian 项目领导人职位已有三位侯选者
查看>>
阿里巴巴与三个知名车企达成合作,将为其“AI+车”解决方案
查看>>
django小项目:搭建简易火车车票预订系统
查看>>
仅研发就投入3300人 华为如何掘金物联网?
查看>>
表单调试工具推荐
查看>>
Kubernetes node的防火墙问题导致pod ip无法访问
查看>>
hdfs-site.xml配置
查看>>
为什么多线程读写 shared_ptr 要加锁?
查看>>
netware 6.5的故障解决
查看>>
linux 同步IO: sync、fsync与fdatasync
查看>>
笼络人才,再三“表白”,库克表示苹果更看重AR
查看>>
[原创]对于运行ASP.NET程序时,提示:无法启动程序“http://localhost:3532/Default.aspx”。的疑问...
查看>>
潮鞋的AR初体验,鬼冢虎和Anrealage合作新鞋
查看>>
4星|《错误的行为》:经济行为中大部分时候人们是不理性的
查看>>
java中包容易出现的错误及权限问题
查看>>
Hibernate5-查询与排序
查看>>
硬盘速度测试
查看>>
mouseout、mouseover和mouseleave、mouseenter区别
查看>>