InfoQ

新闻

JSF Testing Tools

作者 Srini Penchikala译者 曹云飞 发布于 2008年1月3日 上午4时34分

社区
Java
主题
开放源代码,
工件和工具,
单元测试
标签
测试,
框架
因为在容器以外测试JSF组件有所限制,所以大家一直认为对于JSF应用进行单元测试是困难的。多数web层的测试框架遵循黑盒测试方式,开发者用web组件编写测试类来验证渲染的HTML输出是否符合预期。HtmlUnitHttpUnit,Canoo WebTestSelenium等框架都属于这个类型。这些框架的局限在于它们仅仅只能测试web应用的客户端。

但是这种现象已经随着近来发布的JSFUnit和其它一些JSF测试框架,如Shale TestJSF Extensions而改变了。这些测试框架支持对web应用的客户端和服务器端组件的白盒测试。并且,一些项目,如Eclipse Web Tools Platform (WTP)和 JXInsight 已开始协助JSF应用的开发和测试了。

与其它的单元测试框架一样,一个典型的JSF测试框架需要具备以下特性:

  • 可在容器之外独立的运行一个测试用例,可从一个类似Eclipse NetBeans的IDE里面运行测试用例,以促进测试驱动开发(TDD)。 
  • 可测试完整的HTTP请求-响应生命周期。
  • 与构建工具如AntMaven集成 ,从而在一个自动构建和持续集成的环境下运行单元测试。

测试框架还需支持JSF的特定需求,如:

  • 在测试方法中调用JSF API,而不是检查HTML输出或客户端DOM对象。
  • 通过验证用户在表单上的输入和访问正确的页面视图来导航测试。
  • 验证action是否按预期执行,以及错误情况是否显示预期的错误消息。
  • 即使rendered属性被设置为假(组件不在web浏览器上渲染但仍在服务器端保存状态)时依然可以验证JSF组件。
  • 验证XML配置文件(faces-config.xml 等)是否被正确加载。

 测试框架

JSFUnit构建在HttpUnit和Apache Cactus之上,允许JSF应用和JSF AJAX组件的综合测试和调试。它可以在同一个测试类里测试JSF产品的客户端和服务器端。有了JSFUnit API,测试类方法可以提交表单数据,并且验证管理的bean是否被正确更新。

JSFUnit包括一个JSF静态分析测试套件用来验证JSF配置文件,以确保在运行时产生问题之前就能识别出任何与配置相关的问题。它还提供了JSFTimer组件来执行JSF生命周期的性能分析。它可被应用于跟踪JSF生命周期的每个阶段对于一个指定的web请求的响应时间,并断言该响应时间在SLA限定之内。

JSFUnit支持RichFacesAjax4jsf 组件。此框架的Beta 1版本在上月发布,第二Beta版本计划在下个月末发布。

Shale 测试框架作为一个Apache项目,提供了对Servlet和JSF组件的mock对象实现。这些基础的测试类可应用于测试Shale框架类以及构建于该框架之上的JSF应用组件。Shale测试可用于编写独立的单元测试来运行ViewController 接口暴露的方法。因为为一个ViewController 组件搭建运行环境很复杂,所以Shale测试是很有用的。以下是Shale测试框架的主要类:

Shale测试还与Spring框架进行了集成,允许JSF组件被绑定为管理bean或Spring bean。

JSF Extensions项目是一个无UI组件的集合,它扩展了基于JSF 1.2的web应用的功能。它使用JUnit,HTMLUnit和Cactus进行自动测试。框架的Test-Time模块为JSF 1.2提供mock对象。Design-Time模块具有JSF热部署功能,能停止和重启应用而无需经历构建和重部署周期。这个基于JSF PhaseListener接口的特性会使得所有的配置文件和类被重载。这些使得开发者能在编写JSF应用时遵循一种测试驱动迭代JSF开发方式。

工具

还有一些开发工具也辅助JSF应用的开发和性能检测。JInspired 组的JXInsight提供了JSF跟踪和性能检测特性,该特性基于PhaseListener接口。在JSF应用中使用这个跟踪监听器,开发者和web管理员可以对于一个JSF请求收集到例如跟踪栈、java调用栈和运行时UIComponent的层次关系等信息。

Eclipse WTP 项目里的JSF工具的子项目还提供了支持开发和部署基于JSF的web应用的工具,如Visual JSF Page Editor和Faces Config Editor。

查看英文原文JSF Testing Tools

没有回复

回复

独家内容

剖析短迭代

敏捷教练Dave Nicolette提出:我们应该如何设定迭代长度?是要根据发布周期的时间么?使用短迭代又有哪些好处?

应用JSF、Ajax和Seam开发Portlets(1/3)

本文主要讲述了如何用JBoss Portlet Container 和JBoss Portlet Bridge创建新项目,怎样配置一个JSF应用去使用JBoss Portlet Bridge,以及JBoss Portlet Bridge所具备的功能。

AtomServer:数据分发的发布动力(第二部分)

在这篇文章里,Bryon Jacob和Chris Berry将和我们继续探讨AtomServer,它是基于Apache Abdera的完整Atom存储实现。作者还创建了几个Atompub规范扩展,其中包括自动标记、批处理和Feeds聚合。

架构师(试刊第二期)

InfoQ中文站的电子杂志《架构师》试刊第二期出版了!相比于上期,我们在内容的选择安排和版式上都根据读者的意见重新做了修正。“细节决定成败”,我们希望基于InfoQ中文站的专业内容,《架构师》能逐渐成为大家喜欢的电子刊物!

一种正规的性能调优方法:基于等待的调优

在本文中,Steven Haines探讨了Web应用性能调优问题。该领域过去更像是一门艺术而不是一门科学。他提出了一种称为基于等待调优的方法,使整个调优过程更加可度量,也因此更具科学性。

Java程序员ActionScript 3入门

通常来说,改变技术路线时最艰难的部分是辨别语言语法之间的不同。这篇文章就为Java开发者提供了一份如何转向Flex基础语言ActionScript的指南。

浅谈如何创建Rails应用

本视频主要以财帮子为例,介绍了如何创建一个PV为百万级的Rails应用。其中包括:Rails应用的服务器架构、Rails Cache的优化、负载均衡的处理、Web服务器的调试、分布式解决方案、Open API的设计等等。

Alexandru Popescu谈InfoQ.com网站架构

InfoQ首席架构师Alexandru Popescu在采访中谈论了InfoQ架构、Webwork与DWR、Hibernate与JCR、Hibernate可扩展性、最新的InfoQ视频流系统和InfoQ的未来规划。