5

您能否分离 IceFaces 应用程序的组件,以便可以单独测试它们,而不是在组装的应用程序上使用 Selenium 或 HttpUnit 之类的东西?

支持 bean 可以很容易地隔离(如果编写为可测试的),但我有兴趣测试应用程序的模板/显示部分,同时尽可能少地使用应用程序的其余部分。这可以做到吗?如何?

有没有办法使用“虚拟数据”将 IceFaces 对象呈现为文本,然后我可以通过传统的单元测试运行?

我可以想办法完成所有这些,但它们涉及创建多个应用程序(我希望测试的每个组件一个)。然而,这似乎是一种次优的做事方式。

4

2 回答 2

1

这并不是您所要求的,但JSFUnit(它使用 JUnit、Cactus、HtmlUnit 和 HttpUnit)似乎是在 JSF 领域进行测试的重要候选者。你考虑过这个选项吗?也许看看JSFUnit Wiki及其入门指南

请注意,FAQ 报告了 IceFaces 的一些问题,但它已经很老了(2009 年初),从那时起情况可能已经改变(在 JBoss 存储库中有一些演示项目,如jboss-jsfunit-examples-icefacesicefaces-demo-address所以可能值得在 JSFUnit 或 IceFaces 邮件列表上询问确切的状态)。

编辑:正如评论中提到的,OP 正在寻找不那么“高级”的东西。也许看看页岩测试框架

Shale 测试框架提供了模拟对象库,以及用于创建您自己的 JUnitTestCase的基类。

模拟对象在 org.apache.shale.test.mock以下容器 API 的包中提供:

  • JavaServer Faces
  • 小服务程序

免责声明:Apache Shale 于 2009 年 5 月搬入Attic(即它已经到了生命的尽头),但我不知道任何其他用于 JSF 的“成熟”模拟框架,所以无论如何我都会提到它(代码仍然存在) . 我会以对其他解决方案非常感兴趣的方式关注此线程:)

于 2009-11-30T00:13:26.407 回答
1

如果我正确理解您的问题,那么为您的页面创建特殊的虚拟支持 bean,然后创建将这些 bean 映射到 .jspx 文件的测试 JSF 配置文件应该是一件简单的事情。当然,虚拟 bean 不会涉及任何业务逻辑或后端服务——它们只是简单的数据集,在您的测试中很容易验证。

创建一个 ant 脚本来替换您的虚拟支持 bean 和测试配置文件。运行你的测试。如果您不想要像 HTTPUnit 这样繁重的东西,并且如果您在应用程序中使用 Spring,请查看此博客文章,了解如何在没有 Web 服务器的情况下模拟完整的 Web 上下文。您的测试可能需要嗅探原始 HTML 输出以验证结果。这会很棘手,因为 IceFaces 喜欢处理 DIV ID 和 DOM 树的其他相关部分,您可能想要嗅探这些部分。(仅此一项可能就是很少有 JSF 开发人员尝试对 JSF 输出进行单元测试的原因。)

验证测试后,将常规 bean 和配置文件交换回应用程序。

瞧!您刚刚对 JSF 组件进行了单元测试。

Mind you, the whole business of swapping out beans and config files is messy. It would be much, much easier if IceFaces used Spring to match backing beans to JSF pages -- then you could simply define the test-beans in an application.xml with the relevant test classes. But such is life.

Good luck, and let me know how it works out for you!

于 2009-12-03T18:01:02.683 回答