使用SWTEventHelper清除SWT侦听器通知

为基于SWT的UI编写测试通常需要以编程方式通知小部件侦听器。 不幸的是,用于创建,初始化并最终触发事件的代码有点冗长,并且分散了测试的实际目的。 在几次编写了类似的初始化例程之后,我想出了一个小实用程序类,它避免了这些冗余并使代码更具表现力1

该类称为SWTEventHelper ,它使用流利的接口编码风格,并结合了静态导入2 ,例如从Mockito已知的。 以下片段通过一个简单的示例演示了用法:

public class MouseDownCounter extends MouseAdapter {private int count;public MouseDownCounter( Control control ) {control.addMouseListener( this );}@Overridepublic void mouseDown( MouseEvent event ) {count++;}public int getCount() {return count;}
}

查看MouseDownCounter的代码,可能会认为有必要确保鼠标按下事件实际上将计数增加一。 使用SWTEventHelper进行的测试可能如下所示:

public class MouseDownCounterTest {@Rulepublic final DisplayHelper displayHelper = new DisplayHelper();@Testpublic void testMouseDownIncreasesCount() {Composite parent = displayHelper.createShell();Control control = new Label( parent, SWT.NONE );MouseDownCounter counter = new MouseDownCounter( control );trigger( SWT.MouseDown ).on( control );assertEquals( 1, counter.getCount() );}[...]
}

该测试在测试的构建4部分中创建了一个“真实的” SWT控件3 。 之后,控件被我们的被测试单元MouseDownCounter “包装”。 以下操作部分使用SWTEventHelper#trigger(int)创建一个SWT.MouseDown事件,并通过SWTEventHelper#on(Widget)通知在Label控件处注册的侦听器。 最后但并非最不重要的一点是,检查部分确保鼠标向下实际上增加了计数器。

SWTEventHelper还为org.eclipse.swt.widgets.Event每个属性提供一种配置方法。 查看以下代码行,了解如何使用某个Event#keyCode触发事件通知:

trigger( SWT.MouseDown ).withKeyCode( SWT.BUTTON1 ).on( control );

由于我已经使用了这个小助手一百多次,因此对其他人也可能有用。 因此,我设置了一个GitHub要点,您可以在其中下载SWTEventHelper代码: https : SWTEventHelper

不要害羞,尝试一下!

  1. 当然,在情人眼中,表达至少是某种程度上的
  2. Eclipse通过“ 收藏夹”首选项设置提供了使用静态导入配置内容辅助的可能性,这使这种方法更加舒适
  3. DisplayHelper通过自动处理与Display相关的初始化和处理, DisplayHelper减少了打字工作。 您可以在文章《轻松使用SWT测试设置的JUnit规则》中找到说明和下载链接。
  4. 测试格式基于BUILD-OPERATE-CHECK模式(Robert C. Martin,清洁代码,第9章,清洁测试)。 但是在现实世界中,我可能会将构建部分提取到单独的方法中

参考: 代码Affine博客上的JCG合作伙伴 Frank Appel 提供的SWTEventHelper清理SWT侦听器通知 。

翻译自: https://www.javacodegeeks.com/2014/03/clean-swt-listener-notifcations-with-swteventhelper.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364798.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java逆向_Java逆向基础之异常

异常由之前月份处理修改的例子//清单1IncorrectMonthException.javapublic class IncorrectMonthException extends Exception {private int index;public IncorrectMonthException(int index) {this.index index;}public int getIndex() {return index;}}//清单2Month2.javac…

luogu4770 [NOI2018]你的名字 后缀自动机 + 线段树合并

其实很水的一道题吧.... 题意是:每次给定一个串\(T\)以及\(l, r\),询问有多少个字符串\(s\)满足,\(s\)是\(T\)的子串,但不是\(S[l .. r]\)的子串 统计\(T\)本质不同的串,建个后缀自动机 然后自然的可以想到&#xff0c…

centos-7.2 node.js免编译安装

cd /usr/local/wget https://npm.taobao.org/mirrors/node/v8.9.3/node-v8.9.3-linux-x64.tar.gz tar -zxvf node-v8.9.3-linux-x64.tar.gz //已编译可以直接运行./bin下面的命令rm -rf node-v8.9.3-linux-x64.tar.gz //解压完删包 // 建立全局快捷方式 ln -s 源命令文件 快…

团队计划会议

跟航哥想了挺多要做什么,要完成什么,以什么为主要功能 提出了几个想法,并做了投票 最后决定一起做一个跑腿软件 最初的任务量: 跟航哥商量两个人一人负责两个模块 航哥负责管理员和下单 我负责接单跟其他琐碎的小功能 呐&#xff…

在基于Spring MVC的应用程序中配置favicon.ico

Favicon是与您的网站相关的图标(favicon.ico)。 并非每个网站都在使用favicon。 但是大多数浏览器并不关心它,反正他们都要求它。 当图标图标不在适当位置时,服务器将返回不必要的404 Not Found错误。 在典型的Spring MVC应用程序…

vue.js java php_准吗?Java程序员喜欢AngularJS,PHP程序员喜欢Vue.js!

编程语言与框架或者库之间有联系是很正常的事情,如果我们告诉你,使用某一种编程语言或技术的开发人员可能更喜欢某个框架,你会作何反应呢?Stack Overflow根据网站内最常访问的标签将开发人员分为多个组,并检查了每组每…

BAJT高级Java面试题

答对这些面试题,PASS 掉 80 % 的竞争者 hashcode相等两个类一定相等吗?equals呢?相反呢? 介绍一下集合框架? hashmap hastable 底层实现什么区别?hashtable和concurrenthashtable呢? hashmap和treemap什么区别?低层数据结构是什么? 线程池用过吗都有什么…

结构化日志:出错时你最想要的好朋友

目录 介绍什么是日志?Grab中日志的状况为什么改变?结构化日志支持不同格式的多写开发中类似生产环境的日志因果顺序但为什么要结构化记日志?原文:Structured Logging: The Best Friend You’ll Want When Things Go Wrong 介绍 在…

在vue项目中添加特殊字体

这里的特殊字体,指的是一般用户电脑未安装到本地的字体,要引入这样的字体,首先需要把字体文件下载下来。 就像上图这样的,ttf格式的,然后在项目里添加它。 然后我们在font.css里用font-face规则引入这个字体文件并命名…

使用Spring WS创建合同优先的Web服务

1引言 本文介绍了如何使用来实现和测试SOAP Web服务 Spring Web Services项目 。 本示例使用JAXB2进行(取消)编组。 为了开发服务,我将使用合同优先的方法,该方法首先定义服务合同,然后基于该合同实施服务。 本文分为…

java中的常用日期类_Java中的常用日期类说明

日期类常用的有三个,Date类,Calendar(日历)类和日期格式转换类(DateFormat)Date类中的大部分的方法都已经过时,一般只会用到构造方法取得系统当前的时间。public class DateDemo {public static void main(String[] args) {Date date new Da…

转载 Net多线程编程—System.Threading.Tasks.Parallel

.Net多线程编程—System.Threading.Tasks.Parallel System.Threading.Tasks.Parallel类提供了Parallel.Invoke,Parallel.For,Parallel.ForEach这三个静态方法。 1 Parallel.Invoke 尽可能并行执行所提供的每个操作,除非用户取消了操作。 方法…

三方面搞定http协议之“状态码”

当我们向服务器请求数据的时候,服务器会给我们一个反馈,告诉我们对待我们的请求,服务器处理得怎么样了,而这个反馈,是通过数字来传达的,这个数字就叫状态码。 状态码分为以下几种: 1xx&#xf…

哪个更好的选择:克隆或复制构造函数?

这就是我开始撰写本文的方式。 我已经读过很多次这样的声明: “当对象引用可变的最终字段时,克隆变得很困难。” 每次我在Google上搜索它时,都要了解它的确切含义,并且在此过程中也忘了它。 因此以为我会在此撰写博客,…

Fiddler教程--简介

1、开发环境host配置自己修改系统的host来回挺麻烦的 2、前后的接口调试 3、线上bugfix 4、性能分析和优化 5.等等... 工作原理 一个代理服务器地址改为 127.0.0.1:8888流模式边走边返回缓冲模式http请求完成所有的数据之后,才返回 界面功能介绍 1.工具栏 从下图红色…

java map是有序的吗_Java:如何初始化和填充最终的静态有序Map?

我在Java中有一个词干算法,它需要一个静态的最终HashMap< String,String>预先填写了大约30 000条记录.我需要地图按照插入的顺序保存记录(我得到一个提示,我可以使用LinkedHashMap&#xff1f;).我以为我可以在Java类文件中手动插入值,因为这是在RAM中加载它们的最快方法…

跟面向对象卯上了,看看ES6的“类”

上回我们说到ES5的面向对象&#xff0c;以及被大家公认的最佳的寄生组合式继承。时代在进步&#xff0c;在ES6中对于面向对象这个大boss理所应当地进行了一次大改&#xff0c;从原先那种比较长的写法转变为“小清新”写法。我们一起来看一下。 在ES6中是有类这个概念&#xff0…

js 变量作用域

例子 <script>var a "heh"function findLove(){console.log(a);function findforyou(){var a "you";console.log(a);}function findother(){console.log(a)}findforyou();findother();}findLove(); </script> 输出 heh you heh 例子 <scri…

Jin Ge Jin Qu hao UVA - 12563 01背包

题目&#xff1a;题目链接 思路&#xff1a;由于t最大值其实只有180 * 50 678&#xff0c;可以直接当成01背包来做&#xff0c;需要考虑的量有两个&#xff0c;时间和歌曲数&#xff0c;其中歌曲优先级大于时间&#xff0c;于是我们将歌曲数作为背包收益&#xff0c;用时间作为…

Java 8中的5个功能将改变您的编码方式

Java 8在JVM和语言级别都包含了一些非常令人兴奋的功能。 虽然最初为该发行版设想的某些功能已扩大范围或已推出到第9版&#xff0c;但实际上有数十个新功能。 许多新添加的内容在编译器&#xff0c;JVM或帮助系统级别都进行了后台改进。 这样&#xff0c;虽然我们可能会从中受…