2009-11-23 52 views
5

您可以分离IceFaces应用程序的组件,以便它们可以独立测试,而不是在组装的应用程序中使用类似Selenium或HttpUnit的东西?单元测试冰面

支持bean可以很容易地分离出来(如果写入可测试),但我感兴趣的测试应用程序的模板/显示部分,而使用尽可能少的应用程序尽可能的休息。这可以做到吗?怎么样?

有没有办法来渲染使用“伪数据”,我可以再通过传统的单元测试运行ICEfaces的对象为文本?

我能想到的方法可以做到这一切,但他们涉及创建多个应用程序(一个用于我希望测试的每个组件)。但是,这似乎是一种次优的处事方式。

+1

对于所有有抱负的框架设计师......请考虑在设计阶段如何最好地适应测试。 :-P – 2009-12-04 22:37:28

+0

阿门到那!这绝对是一个需要考虑的设计限制。 – Ryan 2009-12-06 01:53:33

回答

1

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

创建一个ant脚本以替换您的虚拟后备bean和测试配置文件。运行你的测试。如果你不想像HTTPUnit一样繁重,并且如果你在你的应用中使用Spring,请看this blog post,这是一个很好的方法来模拟一个完整的web上下文而无需web服务器。您的测试可能需要嗅探原始HTML输出以验证结果。这将会非常棘手,因为IceFaces喜欢挖掘DIV ID和DOM树中其他相关的部分,您可能想要嗅探它们。 (这可能就是为什么很少有JSF开发人员尝试单元测试JSF输出的原因。)

一旦您的测试通过验证,将常规bean和配置文件交换回应用程序。

瞧!您只是单元测试了您的JSF组件。

请注意,交换bean和配置文件的整个业务是凌乱的。如果IceFaces使用Spring将支持bean与JSF页面进行匹配,那么将会更加容易 - 那么您可以简单地在application.xml中使用相关测试类定义测试bean。但这就是生活。

祝你好运,让我知道它是如何为你工作的!

1

这不是你要求的内容,而是JSFUnit(它使用JUnit,Cactus,HtmlUnit和HttpUnit)似乎是在JSF土地上进行测试的一个重要候选人。你有没有考虑过这个选择?也许看看JSFUnit Wiki及其Getting Started Guide

请注意,常见问题是报告的一些问题与ICEfaces的,但它很老的(2009年初),情况可能会改变,因为再(也有在JBoss的库一些演示项目,如jboss-jsfunit-examples-icefacesicefaces-demo-address因此它可能是值得询问JSFUnit或IceFaces邮件列表的确切状态)。

编辑:正如在评论中提到的,OP正在寻找一些不那么“高级”的东西。也许有一个看看Shale Test Framework

页岩测试框架提供了模拟 对象库,再加上基类 创建自己的JUnit TestCase秒。在包装中提供

Mock对象 org.apache.shale.test.mock为 以下容器的API:

  • 的JavaServer Faces
  • 的Servlet

免责声明:阿帕奇页岩2009年5月搬进Attic (即它已经达到其生命的尽头),但我不知道任何其他“成熟”的JSF模拟框架,所以我是无论如何提及它(代码仍然存在)。我会按照这个线程与其他解决方案:)

+0

是的,我看过那个。可悲的是,这对我的需求来说太“高级”了。我想像JSFUnit一样,单独测试每个部分而不是整个堆栈。 – Ryan 2009-11-30 00:29:46