支付宝通知侦听器是什么
为基于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
不要害羞,尝试一下!
- 当然,在情人眼中,表达至少是某种程度上的
- Eclipse通过“ 收藏夹”首选项设置提供了使用静态导入配置内容辅助的可能性,这使这种方法更加舒适
-
DisplayHelper
通过自动处理与Display
相关的初始化和处理,DisplayHelper
减少了打字工作。 您可以在文章《轻松使用SWT测试设置的JUnit规则》中找到说明和下载链接。 - 测试格式基于BUILD-OPERATE-CHECK模式(Robert C. Martin,清洁代码,第9章,清洁测试)。 但是在现实世界中,我可能会将构建部分提取到单独的方法中
翻译自: https://www.javacodegeeks.com/2014/03/clean-swt-listener-notifcations-with-swteventhelper.html
支付宝通知侦听器是什么