如何对遗留J2EE应用程序进行单元测试

时间:2011-06-21 17:17:50

标签: java unit-testing scala java-ee

这可能听起来像一个模糊的问题,但我正在寻找一些特定的指针。

我们的J2EE应用程序构建于Struts2 + Plain Servlets + JSP + iBatis + Oracle

之上

我更喜欢在Scala中编写单元测试,这样我也可以学习侧面的语言

  • 在一些特定步骤之后,我需要能够验证JSP中是否显示了特定列
    • 点击链接。选择一些参数并将页面提交给servlet
    • 确认下一页的<table>标记内有特定列。
  • 我需要为serlvet创建模拟请求?

我正在尝试编写上述测试以及核心业务功能测试,但问题是我试图将遗留代码包装在单元测试中,而且代码当然不是为单元测试而设计的。

2 个答案:

答案 0 :(得分:3)

我不打电话给这个单元测试。当您尝试测试几个单元的集成时。另外,为JSP创建单元测试相当困难,因为它只有在容器中时才有许多上下文依赖性。

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

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

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

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

但它再次不是单元测试,而是集成测试。

答案 1 :(得分:0)

就像大家都说的那样,你并不是在谈论单元测试。你在谈论功能测试。我会认真思考你的真正目标是什么。推动自动化测试的动力是什么?应用程序是否存在配置问题(即,它很难配置,因此某些部分可以正常工作,而其他部分则不然)。这可能是在selenium中构建针对您的疼痛页面和测试用例的烟雾测试套件的合理性。这也有助于检测回归错误。

至于遗留问题。没有任何应用程序无法帮助如果您在selenium中运行前端测试,那么只要其可解析的HTML编写代码并不重要。

至于您的实际服务器端代码。你只需要滚动Andy Dufresne样式。在修复错误并添加功能代码时考虑到测试驱动开发原则。返工与您的更改相关的代码并添加单元测试。如果你继续削减遗留应用程序的速度,你会感到惊讶。