【问题标题】:How to unit test legacy J2EE application如何对遗留 J2EE 应用程序进行单元测试
【发布时间】:2011-06-21 17:17:50
【问题描述】:

这听起来像是一个模糊的问题,但我正在寻找一些具体的指针。

我们的 J2EE 应用基于 Struts2 + Plain Servlets + JSP + iBatis + Oracle

我更喜欢用 Scala 编写单元测试,这样我也可以一边学习这门语言

  • 按照一些特定步骤,我需要什么来验证 JSP 中是否显示了特定的列
    • 单击一个链接。选择一些参数并将页面提交给 servlet
    • 验证下一页在其<table> 标记内是否有特定列。
  • 为 serlvet 创建模拟请求需要什么?

除了核心业务功能测试之外,我还尝试编写类似上面的测试,但是问题是我试图将遗留代码包装在单元测试中,并且代码当然不是为单元测试而设计的。

【问题讨论】:

  • 你的例子远远超出了单元测试。
  • 是的。第一步并不是真正的单元测试,但是,是否有解决方案可以对此进行测试?

标签: java unit-testing scala jakarta-ee


【解决方案1】:

我不会将此称为单元测试。当您尝试测试多个单元的集成时。此外,为 JSP 创建单元测试也相当困难,因为它有许多上下文依赖项,只有当您在容器中时才可用。

相反,我建议编写一些针对正在运行(已部署)的应用程序执行的自动化功能测试。

Selenium 这样的框架在这​​里可能会有很大帮助,因为它们允许模拟真实的用户行为并对生成的 HTML 代码进行断言。

编辑:这里的另一种方法可能是:

  • 在您的测试代码中启动嵌入式 servlet 容器,例如 Jetty
  • 将所有普通 servlet 和 JSP 部署到该位置
  • 将 Oracle 数据库替换为内存数据库,例如 HSQLDerby
  • 使用DBUnit 填充一些测试数据
  • 然后再次使用Selenium(具有Java 绑定)或HttpUnit 针对生成的HTML 代码发出请求和断言。

但同样,它不会是单元测试,而是集成测试。

【讨论】:

    【解决方案2】:

    就像大家说的,你不是真的在谈论单元测试。你说的是功能测试。我会认真考虑你的真正目标是什么。是什么推动了自动化测试的发展?应用程序是否存在配置问题(即难以配置,因此某些部分工作而其他部分不工作)。这可能证明在 selenium 中针对您的痛苦页面和测试用例构建一个冒烟测试套件是合理的。这也将有助于检测回归错误。

    至于遗留问题。没有应用程序是无能为力的。如果您在 selenium 中运行前端测试,那么代码的编写方式并不重要,只要其可解析的 HTML 即可。

    至于您的实际服务器端代码。你只需要滚动Andy Dufresne 风格。当您修复错误并添加功能代码时,请牢记测试驱动开发原则。返工与您的更改相关的代码并添加单元测试。如果你不断改进它,你会惊讶于遗留应用程序的出现速度有多快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      相关资源
      最近更新 更多