某个类的名称拼写错误而造成的运行时出错,是很难在运行时追踪到产生问题的根源的。缺乏合理的默认配置信息就会进一步把这个问题扩大化。实际上,在某些框架中,伪装成XML文件的样板代码差不多等同于甚至超过应用程序中实际可运行的Java代码数量。Java开发人员将这些XML文件称为“XML地狱”。
企业级Java.社区认识到了这个问题的严重性,并试图使用Java源代码中的注解替代XML文件。EJB3就是Java官方组织努力的结果,它提出了在企业级Java组件中使用注解。EJB3使得XML文件完全可选,这就朝着正确的方向迈进了一步。Seam将EJB3的注解信息添加进来,并对基于注解的编程模型进行扩展,将其扩展到整个Web应用程序。当然,XML对于配置数据来说并非完全都是坏事。Seam的设计人员意识到,XML最适合于指定Web应用程序的页面流,或者定义业务流程工作流。使用:XMlL文件可以集中精力管理整个应用程序的工作流,而不会将这些信息散落到各个Java源文件中。工作流的信息甚少和源代码相匹配,因此,XML文件不必要将已经存在于源代码中的信息再次复制到自身中。有关这方面主题的更多内容,请参阅第24.5节。
1.8 为方便测试而设计
Seam是基于方便测试的目的而设计的。所有的Seam组件都只是带有注解的POJO对象,因此很容易对Seam组件进行单元测试:只需要首先利用普通的Java关键字new创建POJO对象的实例,然后再运行测试框架(例如Unit或者TestNG)中的任意方法即可。如果需要对多个Seam组件之间的交互进行测试,那么可以首先将这些组件分别进行实例化,然后再手动建立它们之间的相互关系(即明确调用seRer方法,而不是依靠Seam的“依赖注入”特性)。第26章 将讲述如何为Seam应用程序建立单元测试,以及如何为测试用例模拟数据库服务。
Seam中的集成测试甚至可能比单元测试更为容易。在Seam测试框架中,可以通过编写一些简单的脚本来模拟Web用户交互,并对交互的结果进行测试。也可以在测试脚本中使用JSFEL(Expressionl,anguage,表达式语言)来引用Seam组件,就像在JSFWeb页面中所做的一样。类似于单元测试,也可以直接从JavaSE环境中的命令行直接运行集成测试,不需要专门为了运行这些测试而启动应用服务器。
展开