使用SWTEventHelper清除SWT侦听器通知

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

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

public class MouseDownCounter extends MouseAdapter {

  private int count;

  public MouseDownCounter( Control control ) {
    control.addMouseListener( this );
  }

  @Override
  public void mouseDown( MouseEvent event ) {
    count++;
  }

  public int getCount() {
    return count;
  }
}

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

public class MouseDownCounterTest {

  @Rule
  public final DisplayHelper displayHelper = new DisplayHelper();

  @Test
  public 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章,清洁测试)。 但是在现实世界中,我可能会将构建部分提取到单独的方法中


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值