为基于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

使用SWTEventHelper清除SWT侦听器通知相关推荐

  1. 无人机侦听与反制_使用SWTEventHelper清除SWT侦听器通知

    无人机侦听与反制 为基于SWT的UI编写测试通常需要以编程方式通知小部件侦听器. 不幸的是,用于创建,初始化并最终触发事件的代码有点冗长,并且分散了测试的实际目的. 在编写了类似的初始化例程几次之后, ...

  2. 支付宝通知侦听器是什么_使用SWTEventHelper清除SWT侦听器通知

    支付宝通知侦听器是什么 为基于SWT的UI编写测试通常需要以编程方式通知小部件侦听器. 不幸的是,用于创建,初始化并最终触发事件的代码有点冗长,并且分散了测试的实际目的. 在编写了类似的初始化例程几次 ...

  3. LiteSpeed Web服务器“恢复所有侦听器”解决方法

    I am using LiteSpeed Web Server. It works great when used with the LiteSpeed Cache WordPress plugin. ...

  4. vue 侦听器侦听对象属性_Spring中的异步和事务性事件侦听器

    vue 侦听器侦听对象属性 内置的事件发布功能从Spring的早期版本开始存在,并且对于处理同一应用程序上下文中Spring组件之间的基本通信仍然有用. 通常,应用程序可以生成应用程序事件(可以是任意 ...

  5. 侦听127.0.01_Spring 4.2中由注释驱动的事件侦听器

    侦听127.0.01 介绍 在应用程序内交换事件已成为许多应用程序中必不可少的部分,幸运的是,Spring为瞬态事件(*)提供了完整的基础结构. 最近对事务绑定事件的重构为我提供了一个借口,以在实践中 ...

  6. Spring中的异步和事务性事件侦听器

    内置的事件发布功能从Spring的早期版本开始存在,对于处理同一应用程序上下文中Spring组件之间的基本通信仍然有用. 通常,应用程序可以生成应用程序事件(可以是任意对象)并侦听它们. 整个机制非常 ...

  7. Spring 4.2中由注释驱动的事件侦听器

    介绍 在应用程序内交换事件已成为许多应用程序中必不可少的部分,幸运的是,Spring为瞬态事件(*)提供了完整的基础结构. 最近对事务绑定事件的重构为我提供了一个借口,以在实践中检查Spring 4. ...

  8. java从外部得到数据_java – 如何实现Observer以从侦听器获取数据?

    我正在使用 MaterialDrawer库为我的应用程序创建一个简单的抽屉,库中的一些类实例需要在调用时传递给它们的字符串.一个例子是IProfile类: IProfile profile = new ...

  9. 如果删除了DOM元素,是否还将其侦听器也从内存中删除了?

    本文翻译自:If a DOM Element is removed, are its listeners also removed from memory? 如果删除了DOM元素,它的侦听器也会从内存 ...

最新文章

  1. 《评人工智能如何走向新阶段》后记(再续26)
  2. 分布式服务跟踪及Spring Cloud的实现
  3. Normalization笔记
  4. python怎么输入代码-教你如何将自己的脚本代码放到服务器上运行
  5. jfinal java类型和数据库类型_java下JFinal getModel方法及数据库使用出现问题解决教程...
  6. sha256校验工具_使用AIDE工具做入侵检测
  7. 提升NAS网速技能get:网络聚合模式
  8. [设计模式-行为型]策略模式(Strategy)
  9. 服务器压力测试_性能测试相关的面试题
  10. 【优化算法】改进定步长与变步长LMS算法【含Matlab源码 629期】
  11. pathlib2 Path glob rglob的最新研究成果
  12. 阿里巴巴java规范_《阿里巴巴 Java开发手册》常用规范
  13. magic,imagesc,drawnow
  14. 基于ADS软件的Verilog-A建模
  15. 向日葵服务器维护,向日葵远程服务器
  16. c#选择文件保存路径
  17. 蒲丰投针实验原理_蒲丰投针原理.DOC
  18. 自定义富媒体广告:NativeX SDK 5.0发布!
  19. 【皇室战争】使用Clash Royale API,构建你的皇室应用
  20. matlab锂电池充电电路,锂离子电池充放电电路模型及其仿真.doc

热门文章

  1. html5圆形旋转菜单js,jquery 圆形旋转图片滚动切换效果
  2. 1688推广工具_全面了解1688数字营销
  3. matlab 定义一个有自变量的方程_常微分方程:(第四章) 高阶微分方程
  4. 以Linux系统(Ubuntu)开发生活(一)
  5. 带有Prometheus的弹簧靴和Micrometer第5部分:旋转Prometheus
  6. spring boot简介_Spring Boot简介
  7. apache.camel_Apache Camel 2.23发布
  8. std::tostring_枚举:如何正确使用name()和toString()方法
  9. java streams_使用JShell的Java 9 Streams API
  10. 安装openstack_午餐前如何安装OpenStack Cloud