调试和测试Swing代码

Swing 是一个强大的 GUI 工具包;它可扩展、可配置且跨平台。不过 Swing 的灵活性既是它的主要优势也是它的重大弱点。Swing 可以不同的方式构建同一 UI。例如,您可以使用插页、空白边框或填充符在 GUI 组件之间置入间隔。鉴 于 Swing 选项太多,了解现有 GUI 如同编写新 GUI 一样令人畏惧,且将其视 觉外观与底层代码对应起来也并非易事。(试着在阅读几个使用 GridBagLayout 的代码行时想象一下 GUI。)

不管您是在维护未曾写过的 Swing GUI 还是集成第三方 GUI 组件到您的应 用程序中,理解代码的一种合理方法是编写测试。在编写测试的同时您也就熟悉 了未知代码的内部构造。这样做会同时产生另一个有价值的结果,即您最终会有 一个测试套件,它有助于在维护代码时预防回归的引入。对于第三方 GUI 组件 ,测试套件有助于查明新版本的库是否引入了任何行为变化。

一开始最好先编写功能测试,以了解 GUI 如何响应用户输入。为 GUI 编写 测试比为非可视化代码编写测试更复杂,因为:

理论上,测试必须是自动化的,但是 GUI 则是供人类 — 而非计算机程序 — 使用的。

传统的单元测试涉及到隔离类的测试,不适合 GUI 组件。在 GUI 术语中, 一个 “单元” 涉及多个 GUI 组件的协作,因此它本身包含不止一个类。

GUI 响应用户生成的事件。要测试 GUI,你需要一种可以模拟用户输入的方 法,一直等到生成的事件散播给所有侦听者,然后检查结果,就像 GUI 响应用 户一样。编写模拟用户与 GUI 交互的代码会很繁琐且易出错。

更改 GUI 的布局不应影响强健的功能测试。

另外一个问题就是您必须事先熟知要测试的 GUI 的结构和行为,否则您不知 道自动化测试应使用哪些组件,且哪些内容需要验证。总而言之,要编写 GUI 测试,您必须知道:

GUI 中用于测试的组件

如何在测试中惟一标识这样的组件

特定用例中组件的预期状态(或属性)

使用可视化设计工具(比如 NetBeans Matisse)您可以弄清 GUI 的结构。 不过这种工具仅显示 GUI 的设计时信息,这会与您在运行时看到的不一样。例 如,有些组件可能会根据用户输入而显示为可见或不可见。

传统的调试程序在执行特定用例时不能帮助您了解 GUI 的状态。当调试程序 停在 Swing 代码中置入的断点时,GUI 绘图中断,使得 GUI 看起来像一个空白 方框。理想情况下,当 您使用调试程序进行单步调试时您希望看到 GUI 运作的 方式。

幸运的是,两个开源工具 — Swing Explorer 和 FEST-Swing — 可以帮助 您快速了解现有 Swing 代码。本文向您介绍这些工具,向您展示如何结合使用 它们检查应用程序的 GUI 结构,测试其功能,并识别潜在问题。

要探究的应用程序

对于文章的大部分示例,我将使用一种名为 HTMLDocumentEditor 的免费功 能性 HTML 编辑器,将其作为要测试的应用程序。如果您想自己完成示例,可以 下载 应用程序和样例测试代码。图 1 显示了运行中的 HTMLDocumentEditor:

图 1. HTML 编辑器

时间: 2024-08-22 14:42:08

调试和测试Swing代码的相关文章

C++多线程调试和测试的注意事项

今天顺便说一下开发C++多线程应用程序时,有关调试和测试的一些注意事项.下面这些注意事项主要是针对C++,不过有些对于其它的语言也适用. 关于设置断点和单步执行 很多同学非常依赖于调试器的断点功能和单步功能.这在单线程情况下倒还好(不过有些单线程但涉及GUI的程序,也会有点麻烦).至于多线程程序的调试,这两种手段简直就是噩梦的开始.多线程造成的主要问题大都和竞态条件(Race Condition,详细解释看"这里")有关.而设置断点或单步跟踪可能会严重干扰多线程之间的竞争状态.导致你看

《代码整洁之道》—第13章13.9节测试线程代码

13.9 测试线程代码 证明代码的正确性不切实际.测试并不能确保正确性.然而,好的测试却能尽量降低风险.这对于所有单线程解决方案都是对的.当有两个或多个线程使用同一代码段和共享数据,事情就变得非常复杂了. 建议:编写有潜力曝露问题的测试,在不同的编程配置.系统配置和负载条件下频繁运行.如果测试失败,跟踪错误.别因为后来测试通过了后来的运行就忽略失败. 有一大堆问题要考虑.下面是一些精练的建议: 将伪失败看作可能的线程问题: 先使非线程代码可工作: 编写可插拔的线程代码: 编写可调整的线程代码:

配合LLDB调试器进行iOS代码调试

配合LLDB调试器进行iOS代码调试         在一款完整iOS移动应用的开发中,代码的调试和编写占着同等重要的地位.Xcode默认使用LLDB作为代码调试器,LLDB功能丰富且强大,恰当的使用它,可以帮助开发者事半功倍的完成代码调试的工作. 1.expression代码执行指令         关于LLDB调试器,最常用的指令应该是p与po了,开发者常用这两个命令来进行对象的打印操作,p会打印出对象地址和类型,po则会额外打印出对象的值得内容,实际上,这两个命令都是expression相

使用IBM XL CC++和XL Fortran编译器调试经优化的代码

软件开发者们在开发产品级代码时常会面对一个艰难的选择,你总是希望你的代码性能优越,这意味着你 需要在高优化级别上编译它:同时,你可能希望调试你加入产品中的这份二进制代码,而不是编译时没有经过 优化的源文件.如果你尝试过调试优化过的代码,你可能已经知道这其中的难处了: 源代码语句不按顺序执行,或者在你希望它们执行的时候它们没有: 变量没有按预期地进行更新: 变量没有定义的值,甚至没有一个定义的标识: 在调试器内对变量的更新对程序执行不起作用 . 这不是因为编译器出了什么差错,它设计的初衷就是为了保

php调试打印堆栈的代码

Php代码 <?php // filename: /tmp/a.php function a_test($str) { echo "\nHi: $str"; var_dump(debug_backtrace()); } a_test('friend'); ?> <?php // filename: /tmp/b.php include_once '/tmp/a.php'; ?> 结果 Php代码 Hi: friend array(2) { [0]=> ar

vs2012设置-vs2012如何在调试过程中修改代码

问题描述 vs2012如何在调试过程中修改代码 我设置了编译并继续也不行啊,求哪位大神给个详细步骤 多谢!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 解决方案 也不是所有地方都可以修改并继续的,具体看你调试执行的位置与你修改的代码的关系(执行过的方法都会压入内存栈中),有时即使你改了也要下次调试才能真正生效 ,这是我在网上给你找来的答案

测试并发应用(九)MultithreadedTC测试并发代码

MultithreadedTC测试并发代码 MultithreadedTC 是一个 Java 库用来测试并发应用.它的主要目的是为了解决并发应用的不确定的问题.你不能控制他们的执行顺序.为了这个目睹,它包含了内部节拍器来控制应用的不同线程的执行顺序.这些测试线程作为类的方法来实现的. 在这个指南,你将学习如何使用 MultithreadedTC 库来为LinkedTransferQueue 实现一个测试. 准备 你必须从 http://code.google.com/p/ multithread

求一份适合做测试的代码,最好是web类型的,因为要用到junit

问题描述 求一份适合做测试的代码,最好是web类型的,因为要用到junit 本人学生党,最近在学习软件测试,因课程需要,想找一份适合做软件测试的项目源码,最好有项目介绍,可以比较容易看懂.因为感觉自己以前做过的项目都不太合适,所以想要求一份,哪位大哥以前做过类似的,求帮忙 PS:适合3~5人组队完成的 解决方案 在线等--别告诉我连这种代码都没有 解决方案二: 不要沉,在线等------在线等 解决方案三: 在线等----在线等--

test-怎样用postman测试云端代码

问题描述 怎样用postman测试云端代码 如题!例如有一个方法名字叫test,有一个function function onRequest(request, response, modules) { response.end("helloworld yea") } 在postman里面应该怎样测试? 解决方案 postman主要是方便你构建http post请求,只需要你填好对应的参数.而不是测试js 函数的 解决方案二: 我用Bmob的方法如下: 在REST API中可以调用云端代