快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

金沙国际娱城app_酒文化网进入



Ajax 在近期无疑是 Web开拓界最时髦的字眼之一 —— 与 Ajax 相关的对象、框架、册本以及 Web 站点的剧增便是该技巧金沙国际娱城app盛行的最好证实。此外,Ajax 利用法度榜样也相称灵巧,不是吗?不过,像任何一个开拓过 Ajax 利用法度榜样的人证明的一样,对 Ajax 履行测试真的很未方便。事实上,金沙国际娱城appAjax 的呈现已经从根本上使得许多测试框架和对象掉效,由于它们并没有针对异步 Web利用法度榜样测试进行设计!

有趣的是,某个支持 Ajax 的框架的开拓职员留意到了这个限定,并为此做了一些异常新颖的设计:内置的可测试性。除此之外,因为该框架简化了应用 Java 代码(而不是 JavaScript)创建 Ajax 利用法度榜样,它的动身点甚高,并且充分使用了 Java 平台上无可置疑的标准测试框架:JUnit。

我所论及的框架当然是异常盛行的 Google Web Toolkit,也便是 GWT。在本文中,我将向您展示 GWT 若何实际地使用 Java 兼容性,使 Ajax 利用法度榜样的每个部分都能像与之对应的同步利用法度榜样一样进行测试。

JUnit 和 GWTTestCase

由于与 GWT 有关的 Ajax 利用法度榜样采纳 Java 代码编写,以是异常得当开拓职员应用 JUnit 进行测试。事实上,GWT 开拓小组还为此创建了一个赞助器类 GWTTestCase,扩展自 JUnit 的 3.8.1 TestCase。该基类添加了一些功能,可测试 GWT 代码并处置惩罚某些根基实现从而启动并运行 GWT 组件。

Google Web Toolkit

Google Web Toolkit 在 Java Web开拓社区的宣布声势浩大年夜,同时也得到了与之相当的伟大年夜轰动。金沙国际娱城appGWT 为使用 Java 代码进行设计、构建和支配支持 Ajax 的 Web利用法度榜样供给了一种新颖的要领。Java Web开拓职员不再必要进修 JavaScript 并花费数个小时办理特定于浏览器的问题,他们可以直接进行与 Ajax 有关的富含信息的动态 Web利用法度榜样设计。

必要提醒的是:GWTTestCase 并非用来测试与 UI 相关的代码 —— 它是为了便于测试那些由 UI 交互触发 的异步问题。对 GWTTestCase 用途的误解使许多刚打仗 GWT 的开拓职员备受挫折,由于他们期望能够用它方便地模拟用户界面,但终极发明这是徒劳的。

Ajax 组件有两个基础组成:体验和功能,这些都被设计成异步要领。图 1 演示了一个模拟 Web 表单的简单 Ajax 组件。因为该组件支持 Ajax,表单的提交是异步履行的(即:无需从新载入与传统表单提交关联的页面)。

图 1. 一个支持 Ajax 的简单 Web 表单

输入一个有效单词,单击组件的 Submit 按钮,将向办事器发送消息哀求该单词的定义。该定义经由过程回调异步返回,响应地插入到 Web 页面,如图 2 所示:

图 2. 单击 Submit 按钮后显示相应

功能性和集成测试

图 2 所示的交互测试可用于多个不合场景,然则此中两种场景最为常见。从功能性不雅点斟酌,您或许盼望编写一个测试:填入表单值,单击 Submit 按钮,然后验证表单是否显示定义。别的一个选择是集成测试,使您能够验证客户端代码的异步功能。GWT 的 GWTTestCase 恰是被设计用来履行此类测试。

必要切记的是:在 GWTTestCase 测试用例情况下弗成以进行用户界面测试。在设计和构建 GWT 利用法度榜样时,您必须清楚不要依附用户界面 测试代码。这种思路必要把交互代码从营业逻辑平分离出来,正如您已经懂得的,这是最佳的入门实践!

举例而言,从新查看图 1 和图 2 所示的 Ajax 利用法度榜样。该利用法度榜样由四个逻辑部分构成:TextBox 用于输入目标单词,Button 用于履行单击,还有两个 Label(一个用于 TextBox,另一个显示定义)。实际 GWT 模块的初始措施如清单 1 所示,然则您该若何测试这段代码呢?

清单 1. 一个有效的 GWT 利用法度榜样,然则若何测试它?

public class DefaultModule implements EntryPoint {

public void onModuleLoad() {

Button button = new Button("Submit");

TextBox box = new TextBox();

Label output = new Label();

Label label = new Label("Word: ");

HorizontalPanel inputPanel = new HorizontalPanel();

inputPanel.setStyleName("input-panel");

inputPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);

inputPanel.add(label);

inputPanel.add(box);

button.addClickListener(金沙国际娱城appnew ClickListener() {

public void onclick(Widget sender) {

String word = box.getText();

WordServiceAsync instance = WordService.Util.getInstance();

try {

instance.getDefinition(word, new AsyncCallback() {

public void onFailure(Throwable error) {

Window.alert("Error occurred:" + error.toString());

}

public void onSuccess(Object retValue) {

output.setText(retValue.toString());

}

});

}catch(Exception e) {

e.printStackTrace();

}

}

});

inputPanel.add(button);

inputPanel.setCellVerticalAlignment(button,

HasVerticalAlignment.ALIGN_BOTTOM);

RootPanel.get("slot1").add(inputPanel);

RootPanel.get("slot2").add(output);

}

}

清单 1 的代码在运行时发生了严重的差错:它无法按照 JUnit 和 GWT 的 GWTTestCase 进行测试。事实上,假如我试着为这段代码编写测试,从技巧方面来说它可以运行,然则无法按照逻辑事情。斟酌一下:您若何对这段代码进行验证?惟一可用于测试的 public 措施返回的是 void, 那么,您怎么能够验证其功能的精确性呢?

假如我想以白盒要领验证这段代码,就必须分离营业逻辑和特定于用户界面的代码,这就必要进行重构。这本色上意味着把清单 1 中的代码分离到一个便于测试的自力措施中。然则这并非听上去那么简单。很显着组件挂钩是经由过程 onModuleLoad() 措施实现,然则假如我想强制其行径,可金沙国际娱城app能 必须操纵某些用户界面(UI)组件。

……

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: