快速业务通道

调试和测试Swing代码 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
证是否将文件加载到了编辑器中。

注意,清单 3 按照名称(editor)查询 JTextPane。这是在一个测试中查找 组件最可靠的方式;它保证组件查找从不失败,即使 GUI 的布局在将来会改变 。

用例:改变文档字体的颜色

要验证 HTML 编辑器将文档字体的颜色改为黄色,您需要:

选择 Color > Yellow 子菜单

在编辑器中输入内容

验证输入文本的颜色是黄色

清单 4 显示了如何使用 FEST-Swing 实现上述操作:

清单 4. 用于更改文档字体颜色的测试

@Test public void should_change_document_color() {   editor.menuItemWithPath("Color", "Yellow").click();   JTextComponentFixture textBox = editor.textBox();   textBox.enterText("Hello");   assertThat(textBox.text()).contains("<font color=\"#ffff00 \">Hello</font>"); }

到目前为止,我展示了如何测试简单的 GUI 组件,比如菜单和文本框。接下 来我将介绍一种不太直观的测试模式。

调试和测试Swing代码(6)

时间:2011-06-11 IBM Alex Ruiz

更加复杂的测试

为展示 FEST-Swing 直观紧凑的 API,我将使用 Swing 的一个高度复杂的组 件 — JTable。

我将使用 Sun 公司 Swing 教程中的 TableDialogEditoDemo 应用程序。该 应用程序使用带有定制编辑器的 JTable:JComboBoxes 和 JCheckBoxes,如图 4 所示:

图 4. TableDialogEditDemo

为用作示例,我将编写一个测试,模拟用户选择 0 行处组合框中的第二个元 素。测试要执行的动作是:

按需上下滚动表格使该行可见。

单击第 0 行第 2 列的单元格。

等待组合框出现。

找到并单击组合框。

从组合框中选择第二个元素。

这只是对我要编码的动作的粗略描述。编写真实代码并非微不足道的工作。 幸运的是,FEST-Swing 的 API 简化了该任务,如清单 5 所示:

清单 5. 选择 0 行处组合框中的第三个元素

dialog.table.enterValue(row(0).column(2), "Knitting");

FEST-Swing 可以简化 GUI 测试甚至是复杂测试的编写和阅读。

Swing 线程

Swing 是一个单线程 UI 工具包。因为它不是线程安全的,所以所有 Swing 代码必须在 EDT 中执行。如官方文档所述,从多线程中调用 Swing 代码会造成 线程冲突或内存一致性错误。

Swing 的线程策略状态:

Swing 组件必须在 EDT 中创建。

Swing 组件必须在 EDT 中进行访问,除非您调用文档化为线程安全的方法。

虽然这看起来很简单,不过很容易破坏规则。Swing 不为正确的 EDT 使用提 供任何运行时检查,而且大部分时候表面上 “行为良好” 的 Swing UI 实际上 却破坏了这些规则。

Swing Explorer 和 FEST-Swing 都支持查找 Swing 线程策略的违规行为。 图 5 显示了 Swing Explorer 的 EDT 监视器。EDT 监视器可以在执行应用程序 时报告 EDT 访问违规行为。

图 5. Swing Explorer 的 EDT 监视器

调试和测试Swing代码(7)

时间:2011-06-11 IBM Alex Ruiz

FEST-Swing 提供 FailOnThreadViolationRepaintManager 来检查 EDT 违规 行为,如果检测到任何违规,它会强迫测试终止。配置很简单:在标有 @BeforeClass 注释的 set-up 方法中放入它,如清单 6 所示:

清单 6. 安装 FailOnThreadViolationRepaintManager

@BeforeClass public void setUpOnce() {   FailOnThreadViolationRepaintManager.install(); }

另外, UI 测试可将 FEST-Swing 的 FestSwingTestngTestCase 或 FestSwingJunitTestCase 分为子类,这两个类均已安装了 FailOnThreadViolationRepaintManager。FEST-Swing 也提供有用的抽象类来确 保对 Swing 组件的访问是在 EDT 中完成的。

GUI 测试失败故

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号