快速业务通道

扩展JUnit4以促进测试驱动开发 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
ception{      Map<Class<?>, List<Filter>> filters = new  HashMap<Class<?>, List<Filter>>();      String[] splits = intention.split(ExtensionConstant.REGEX_COMMA);      for(String split : splits){        String[] pair = split.split(ExtensionConstant.REGEX_EQUAL);        if(pair != null && pair.length == 2){          Filter filter = createFilter(pair[0],pair[1]);          String annotationType = ExtensionConstant.ANNOTATION_PREFIX + pair [0];          Class<?> annotation = Class.forName(annotationType);          List<Filter> filterList = null;          if(filters.containsKey(annotation)){            filterList = filters.get(annotation);          }else{            filterList = new ArrayList<Filter>();          }          filterList.add(filter);          filters.put(annotation, filterList);        }      }      return filters;    }    ……………… }

核心类模块中的类是对 JUnit4 中的类的扩展,从下图中可以看到两者的继承关系:

图 4. 核心扩展类和 JUnit4 中类的继承关系

扩展JUnit4以促进测试驱动开发(5)

时间:2011-10-02 ibm 左超

Request 类是 JUnit4 中用来表示一次测试用例请求的抽象概念。它是一次测试用例执行的发起点。 RunerBuilder 会根据测试用例来创建相应的 Runner 实现类。BlockJUnit4ClassRunner 是 JUnit4 中用 来执行单独一个测试用例的 Runner 实现类。我们通过扩展它,来获得 JUnit 执行测试用例的能力,同 时在 ExtensionRunner 中调用过滤器对测试用例方法进行过滤,从而根据我们定义的业务规则来执行测 试用例。Result 类是 JUnit4 中用来封装测试用例执行结果的类,我们对它进行了扩展,来格式化测试 用例执行结果的输出。下面给出 ExtensionRunner 的部分实现。

清单 5. ExtensionRunner 部分实现

public class ExtensionRunner extends BlockJUnit4ClassRunner {    private Map<Class<?>, List<Filter>>  filtersForAnnotation;    public ExtensionRunner(Class<?> klass, String intention)        throws InitializationError, ClassNotFoundException {      super(klass);      filtersForAnnotation = FilterFactory.createFilters(intention);    }    protected Statement childrenInvoker(final RunNotifier notifier) {      return new Statement() {        @Override        public void evaluate() {          runChildren(notifier);        }      };    }    protected void runChildren(final RunNotifier notifier) {      for (final FrameworkMethod each : getFilteredChildren()) {        runChild(each, notifier);      }    }    protected List<FrameworkMethod> getFilteredChildren() {    ArrayList<FrameworkMethod> filtered = new  ArrayList<FrameworkMethod>();      for (FrameworkMethod each : getChildren()) {        if (shouldRun(each)) {         

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号