追求代码质量: 对 Ajax 应用程序进行单元测试

发表于:2007-8-09 16:36  作者:Andrew Glover   来源:IBM

字体: | 上一篇 | 下一篇 |我要投稿 | 推荐标签:

        以我的测试为例,我将首先调用 getDefinition() 方法,然后提供一个 Timer 的 run() 方法的实现。run() 方法得到输出 Label 实例的文本并验证是否是正确定义。定义了 Timer 实例后,我就需要确定其何时运行,同时强制 JUnit 挂起直至 Timer 实例完成。也许听起来有点复杂,不必担心,因为实践起来非常简易。实际上,清单 6 展示了整个过程:
清单 6. 使用 GWT 轻松测试
               
public void testDefinitionValue() throws Exception {
 WordModule module = new WordModule();
 module.getDefinition("pugnacious");
 Timer timer = new Timer() {
   public void run() {
    String value = module.getOutputLabel().getText();
 String control = "inclined to quarrel or fight readily;...";  
 assertEquals("should be " + control, control, value);
    finishTest();
   }
  };
  timer.schedule(200);
  delayTestFinish(500);
}
 
        正如您所见,Timer 的 run() 方法是我真正验证 Ajax 应用程序功能及其应用远程过程调用的地方。请注意 run 方法的最后一步是调用 finishTest() 方法,它意味着一切如预期运行,JUnit 可以不受阻塞正常运行。在实践中,您可能会发现需要根据异步行为完成所需的时间调整延迟时间。但用 JUnit 测试 GWT 应用程序的要点在于:您能够在无需 部署完整功能的 Web 应用程序的情况下测试它。因此,您能够更早地 并且更 频繁地 测试您的 GWT 应用程序。

运行 GWT 测试

        前面我曾提到,如果您想实际运行您的 GWT JUnit 测试,您必须执行大量琐碎的工作来配置运行环境。比如说,要想通过 Ant 的 junit 任务运行我的测试,我就必须确保某些文件位于类路径中并向低层 JVM 提供一个参数。特别是,在调用 junit 任务时,我还要确保托管源文件(以及测试)的目录(或多个目录)位于类路径中,还要告诉 GWT 以何种模式运行。我倾向于使用 hosted 模式,这意味着要使用 www-test 标志,如清单 7 所示:


清单 7. 用 Ant 运行 GWT 测试
               
<junit dir="./" failureproperty="test.failure" printSummary="yes"
  fork="true" haltonerror="true">
 
 <jvmarg value="-Dgwt.args=-out www-test" />
 
 <sysproperty key="basedir" value="." />
 <formatter type="xml" />
 <formatter usefile="false" type="plain" />
 <classpath>
  <path refid="gwt-classpath" />
  <pathelement path="build/classes" />
  <pathelement path="src" />
  <pathelement path="test" />
 </classpath>
 <batchtest todir="${testreportdir}">
  <fileset dir="test">
   <include name="**/**Test.java" />
  </fileset>
 </batchtest>
</junit>
 


        运行 GWT 测试现在转变成调用问题了。还需注意的是 GWT 测试属于轻量级测试, 所以我可以频繁运行测试,甚至是连续运行,就像我在一个持续集成环境(Continuous Integration)中一样。

结束语

        在本文所示的 GWT 测试用例中,您已经看到用于验证 Ajax 应用程序所需的基本步骤。您可以继续测试我的示例 GWT 应用程序,比如测试一些边界用例,但是我认为重点在于:如果使用包含测试特性的框架编写 Ajax 应用程序,测试要比想象中容易。

        要对 GWT 应用程序进行良好测试(对绝大多数应用程序也适用),关键在于设计应用程序时要把测试一并考虑。还要注意 GWTTestCase 不是被用来进行交互测试的。您不能使用 GWTTestCase 直接模拟用户。不过您能够以一种间接的方式用它来验证用户交互,正如本文中演示的那样。


【福利】填问卷送精选测试礼包+接口测试课程!为测试行业做点事!
66/6<123456

评 论

论坛新帖

顶部 底部


建议使用IE 6.0以上浏览器,800×600以上分辨率,法律顾问:上海瀛东律师事务所 张楠律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2020, 沪ICP备05003035号
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪公网安备 31010102002173号

51Testing官方微信

51Testing官方微博

扫一扫 测试知识全知道