JUnit4.8.2来源分析-6.1 排序和过滤
Runner.sort、Request.sortWith和Sorter.apply
yqj2065很快,他们搞死。
Sorter.apply()、Request.sortWith()和Sortable.sort()三者做一件事情?为什么呢?
java.util.Comparator接口是一个策略类,定义了int compare(T o1, T o2)方法。org.junit.runner.manipulation.Sorter implements Comparator<Description>,可是Sorter不过形式上的实现类。通过构造器注入的方式Sorter(Comparator<Description>comparator),初始化Sorter封装的一个实际的排序器Comparator<Description>fComparator。
并且@Override public intcompare(Description o1, Description o2)以实际排序器的返回作为返回。
好吧。这是什么设计模式我不太清楚,总之有一定道理。真正不懂的是Sorter的方法apply。这个什么时候才实用?(注:SortingRequest中用了一下)
publicvoid apply(Object object) {
if(object instanceof Sortable) {
Sortablesortable = (Sortable) object;
sortable.sort(this);
}
}
接口Sortable定义的唯一的方法public void sort(Sortersorter)。
而Sortable是一些Runner的父接口,也就是说,Sortable对象是具有排序方式执行測试的Runner。
依照我眼下的直观感觉,Sortable.sort(Sorter)不如叫Sortable.setSorter(Sorter),某些Runner如ParentRunner。应该有两个域SortStyle和FilterStyle。而不是implements它们。这样更easy理解?
如今有实际排序器:
package myTest.sort;
import java.util.Comparator;
import org.junit.runner.Description;
public class AlphabetComparator implements Comparator<Description> {
@Override
public int compare(Description d1, Description d2) {
return d1.getMethodName().compareTo(d2.getMethodName());
}
有測试目标
package myTest.sort;
import static tool.Print.*;
import org.junit.*;//Test/Ignore
public class Unit4{
@Test public void a() { pln("a() method executed."); }
@Test @Ignore public void b() { pln("b() method executed."); }
@Test public void c() { pln("c() method executed.");
throw new RuntimeException("Throw delibrately");
}
@Test public void f() { pln("f() method executed."); }
}
然后呢?茴香豆的茴有3种写法?不明就里。
package myTest.sort;
import org.junit.runners.BlockJUnit4ClassRunner;
import org.junit.runners.model.InitializationError;
import org.junit.runner.notification.*;
import org.junit.runner.*;
import org.junit.runner.manipulation.Sorter;
public class SortDemo {
public static void t1() {
BlockJUnit4ClassRunner runner=null ;
try {
runner= new BlockJUnit4ClassRunner(Unit4.class);
//runner.filter(new MethodNameFilter("testFilteredOut"));
} catch (InitializationError e) { }
runner.sort(new Sorter(new AlphabetComparator()));
runner.run(new RunNotifier());
} public static void t2() {
Request request = Request.aClass( Unit4.class );
request = request.sortWith(new AlphabetComparator());
Runner runner = request.getRunner();
runner.run(new RunNotifier());
}
public static void t3() {
Request request = Request.aClass( Unit4.class );
Runner runner = request.getRunner();
Sorter sorter=new Sorter(new AlphabetComparator());
sorter.apply(runner);
runner.run(new RunNotifier());
}
public static void go(){t1() ;t2() ;t3(); }
}
先记录一下。
版权声明:本文博客原创文章。博客,未经同意,不得转载。
JUnit4.8.2来源分析-6.1 排序和过滤的更多相关文章
- JUnit4.8.2来源分析-2 org.junit.runner.Request
JUnit4.8.2源代码,最为yqj2065兴趣是org.junit.runner.Request,现在是几点意味着它? ①封装JUnit的输入 JUnit4作为信息处理单元,它的输入是单元測试类- ...
- 【JUnit4.10源码分析】6.1 排序和过滤
abstract class ParentRunner<T> extends Runner implements Filterable,Sortable 本节介绍排序和过滤. (尽管JUn ...
- 【JUnit4.10来源分析】6 Runner
org.junit.runner.Runner它是JUnit作业引擎.它在许多类型的支持下的.处理试验和生产(Description).Failure和Result和其它输出. Runner参见图主类 ...
- 【JUnit4.10来源分析】0导航
JUnit靠GOF 中的一个Erich Gamma和 Kent Beck 单元测试框架编写一个开源,yqj2065分析JUnit的主要目的是源 中学习对设计模式的运用. JUnit也是一个学习Java ...
- 常见排序算法总结分析之选择排序与归并排序-C#实现
本篇文章对选择排序中的简单选择排序与堆排序,以及常用的归并排序做一个总结分析. 常见排序算法总结分析之交换排序与插入排序-C#实现是排序算法总结系列的首篇文章,包含了一些概念的介绍以及交换排序(冒泡与 ...
- [Android分享] 【转帖】Android ListView的A-Z字母排序和过滤搜索功能
感谢eoe社区的分享 最近看关于Android实现ListView的功能问题,一直都是小伙伴们关心探讨的Android开发问题之一,今天看到有关ListView实现A-Z字母排序和过滤搜索功能 ...
- 让Asp.Net WebAPI支持OData查询,排序,过滤。
让Asp.Net WebAPI支持OData后,就能支持在url中直接输入排序,过滤条件了. 一.创建Asp.Net WebAPI项目: 二.使用NuGet安装Asp.Net WebAPI 2.2和O ...
- Contoso 大学 - 3 - 排序、过滤及分页
原文 Contoso 大学 - 3 - 排序.过滤及分页 目录 Contoso 大学 - 使用 EF Code First 创建 MVC 应用 原文地址:http://www.asp.net/mvc/ ...
- Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
转载:http://blog.csdn.net/xiaanming/article/details/12684155 转载请注明出处:http://blog.csdn.net/xiaanming/ar ...
随机推荐
- Codeforces Round #216 (Div. 2) D. Valera and Fools
题目链接:http://codeforces.com/contest/369/problem/D 注意题意:所有fools都向编号最小的fool开枪:但每个fool都不会笨到想自己开枪,所以编号最小的 ...
- VIM 用正则表达式
VIM 用正则表达式 批量替换文本,多行删除,复制,移动 在VIM中 用正则表达式 批量替换文本,多行删除,复制,移动 :n1,n2 m n3 移动n1-n2行(包括n1,n2)到n3行之下: ...
- 头文件 boost/cstdint.hpp
Header boost/cstdint.hpp 头文件 boost/cstdint.hpp 头文件 <boost/cstdint.hpp> 提供了用于编写要求指定整数宽度的可移植代码的 ...
- Python 生成的页面中文乱码问题
第一 保证 程序源文件里的中文的编码格式,如我们把 源文件的编码设置成utf8的. reload(sys) sys.setdefaultencoding('utf-8') 第二, 告诉浏览器,我们须要 ...
- ALV判断修改后是否有不合法数据,有则选中错误行,高亮度显示。
alv数据表维护表时错误行需要高亮度显示 gt_index_rows TYPE lvc_t_row,"用以存放要选择行的内表 gs_index_rows TYPE lvc_s_row.&qu ...
- spring mvc controller间跳转 重定向
1. 需求背景 需求:spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示. 本来以为挺简单的一 ...
- form表单和表格
HTML <table> 标签 border pixels 规定表格边框的宽度. STF cellpadding pixels % 规定单元边沿与其内容之间的空白. STF cellspa ...
- Jar包转成Dll的方式(带嵌套的jar也能做) (转)
研究很好几天,终于成功了.因为写了一个Java的项目,现在要求要改写成C#版本的.但是其中用到了svnkit,svnkit是java平台的.改写成C#的话,要使用SharpSVN,但是SharpSVN ...
- 广东省-IT公司红黑榜排名
红榜Top100 Order Company Name Point Change 1 百富计算机技术(深圳)有限公司 94.00 -- 2 中国网通广州分公司 88.00 -- 3 深圳市汇 ...
- achieve aop through xml
The main way to achive AOP is deploying a xml file. Now a xml file is presented to be a explanation ...