从Scratch执行未经测试的代码的单元和集成测试的方法

时间:2012-07-05 17:29:35

标签: java unit-testing testing junit integration-testing

基本问题是" 如何开始为未经测试的项目编写单元和集成测试?特别是考虑到这个人不熟悉代码并且之前没有进行过集成测试这一事实。"

考虑必须为项目编写单元测试和集成测试的场景。该项目使用Java / J2EE技术​​,根本没有编写任何测试。

我面临的困境是因为我没有编写代码,所以我不想立即重构代码来编写测试。我还必须选择一个测试框架。我正在考虑使用Mockito和Powermock。

我还必须估算测试的代码覆盖率。然后执行集成测试。我将不得不研究集成测试工具并选择一个。我之前没有对项目进行任何集成测试或估计可接受的代码覆盖率。

由于我是独立工作,如果有一些策略,提示,建议我应该从什么开始,以及可以推荐的工具,我将不胜感激。

3 个答案:

答案 0 :(得分:2)

  • 停止。 " ..not familiar with the code..&#34 ;.首先要熟悉代码,最重要的是它的预期功能。您无法重构或单元测试您不熟悉的代码。
  • 由于您之前没有进行单元测试,我建议learning and getting convenient with unit-tests
  

重要提示:错误/错误的单元测试比没有单元测试更差。这是因为下一个维护代码的人会误解   功能。

答案 1 :(得分:2)

先到先得:

  1. 了解架构,主要组件是什么?
  2. 如果您对该程序提供的功能和功能没有很好的概述,请列出它们并创建它们的层次结构
  3. 熟悉代码,我建议采用以下方法:
    • 在您了解其不同组件的代码的起始位置之后,尝试找出方法调用层次结构(在Eclipse中,您可以通过按F3轻松跳转源代码定义)
    • 以后你可以这样做,同时调试代码,这样它会自动跳转到定义,另外你可以观察程序状态如何变化
  4. 对于单元测试本身,我可以为初学者推荐Clean Code第9章(大约 12页)。它使用JUnit作为示例,并非常好地介绍了如何进行良好的测试。

    在那里你会学到像F.I.R.S.T.这样的东西。原则,单元测试应该是:

    快速,独立,可重复,自我验证和Timly

    一些澄清,JUnit是最常用和最常用的测试框架。 Mockito和Powermock是模拟框架,当你想进行集成测试时,它们与JUnit一起使用。

    对于代码覆盖率,我只能推荐Cobertura,但有很多more

    Cobertura

    在深入集成测试(自下而上)之前先从单元测试开始,你也可以反过来做(从上到下),但既然你说你没有那么多的经验,我会坚持到第一

    最后,去吧,然后开始吧。实际编写测试代码时,您将学到最多,最快的知识。

答案 2 :(得分:1)

将测试添加到没有测试的遗留代码是一项艰巨的任务。正如@Suraj所提到的,熟悉代码库和预期的功能。如果你不知道它应该做什么,你就无法测试它。

在选择要测试的代码区域方面。从高商业价值区域开始。哪个功能最重要?您希望确保为该代码设置了强大的测试集。

由于您没有任何单元/集成测试,我将从一些高级端到端测试开始,这至少可以确保给系统的某些输入带来一些预期的输出。这不能确保正确性,但至少可以确保一致性。

然后,当您开发测试套件时,您可以确信您正在进行的重构不会改变代码的行为(除非您发现错误当然正在修复)。

对于测试框架,JUnit是标准的单元测试框架。请注意,Mockito和Powermock框架本身并不测试框架,但它们可以在JUnit中使用。

对于验收测试,还有各种各样的框架可以提供帮助。对于Web UI测试,Selenium非常标准。还有像Fitnesse这样的工具可用于更多的表驱动测试。

还有一些常见的框架来帮助代码覆盖 - Cobertura,Emma,Clover浮现在脑海中。

我还会设置一个自动构建(Jenkins构建服务器设置非常简单)。这将允许您在每次签入时运行测试。即使您的代码覆盖率很低,但要养成这种习惯是很好的。