16

我正在尝试为 JSF 找到一个实用的单元测试框架。

我知道 JSFUnit,但这对我来说非常不切实际。我需要在我的项目中包含大约 10 个 JAR,并跳过许多其他的环节来让它运行。

我意识到——由于需要模拟平台和客户端——对 Web 应用程序进行单元测试是很困难的。但是有更好的方法吗?

4

6 回答 6

9

您是否考虑过使用Selenium或其他工具进行集成测试?Selenium 允许您直接在浏览器中记录和运行测试。您还可以使用Selenium Remote Control在多个浏览器和多个平台上运行测试。

编写单元测试是好的,但它可能会提供更多来创建一些功能集成测试,而不是对表示层代码进行单元测试。

于 2009-06-09T17:19:55.917 回答
3

在我们涉足使用硒的那一刻,我正在从事的项目。实际上,我们花了很多时间编写这些 selenium 测试,但发现它们没有增加任何价值,因为 UI 变化很大,而您最终只会加倍努力而获得很少的投资回报。

selenium 的另一个问题是它需要部署您的代码,这意味着它不能很好地与单元测试框架(例如 maven)配合使用。

我想说的是,为托管 bean 编写真正好的单元测试是非常宝贵的。

于 2009-06-09T17:24:55.300 回答
2

您是否看过 jsfunitwar Ant 任务或 JSFUnit 提供的 Maven 插件?两者都大大降低了生成要测试的 .war 文件的复杂性。我在当前项目中使用 JSFUnit,发现白盒和黑盒测试功能的组合非常强大。因为 JSFUnit 在幕后使用 HtmlUnit,所以您可以非常轻松有效地检查生成的 HTML,或者反过来验证您的内部 JSF 支持 bean 的状态。我能够将 JSFUnit 测试合并到我的持续集成过程中,并且对结果非常满意。


于 2009-06-11T17:58:42.163 回答
1

HttpUnit 也可以作为替代方案。它提供了 api,因此您可以选择自动化测试。

http://httpunit.sourceforge.net/index.html

于 2009-06-10T12:04:20.857 回答
1

Selenium 是肤浅的, jsfunit 是内向的。如果项目不简单,我建议使用 jsfunit。因为团队成员可以更改 jsf managedbean 名称等,所以您可以使用 jsfunit 来捕捉它。

于 2009-12-03T14:47:12.207 回答
0

我和 Paul 一起讨论 Selenium 非常容易设置和开始使用。我在 Firefox 中使用 Selenium IDE,并在该级别进行了一些自定义,然后您可以将它们导出到其他平台,例如 Java JUnit 测试。下载和启动 selenium-server.jar 非常容易,将 selenium-java-client-driver 添加到我现有的 Eclipse Maven POM 驱动程序项目中;然后在 Eclipse 中启动相同的导出 JUnit 测试。我主要想将 Java 用于基本 Selenium IDE 不支持的循环。

我也为我的项目配置了 JSF 单元,这确实需要更多时间来配置......更重要的是,尽管像 JSFUnit 这样的容器内测试对测试的更改需要重建 WAR,在容器中重新部署,然后从 Eclipse 或通过浏览器。因此,为了快速尝试一个小改动,这是非常耗时的。当然,使用 JSFUnit,您可以访问 JSFSession 等的所有内部结构,因此我猜这取决于您需要的测试粒度。

如果有人知道更快的方法来改变 JSFUnit 测试并执行它,我会很感兴趣。在这方面,Selenium 测试肯定更像 JUnit 测试。

于 2009-12-22T19:40:22.257 回答