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

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

  • 相关阅读:
    杭电2027
    杭电2028
    开发者所需要知道的iOS7 SDK新特性
    苹果已向这15款产品和应用宣战
    谷歌J2ObjC(Java to ObjectiveC)版本更新
    国外应用评测网站汇总
    iOS 7 UI设计官方图集
    iOS 7UI设计模板
    js中 setTimeout延时0毫秒的作用
    C# Xmlrpc
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4822869.html
Copyright © 2020-2023  润新知