【问题标题】:Approach to perform unit and integration tests from Scratch for untested code从 Scratch 对未经测试的代码执行单元和集成测试的方法
【发布时间】:2012-07-06 03:51:24
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


【解决方案1】:

先到先得:

  1. 了解架构,主要组件有哪些?
  2. 如果您对程序提供的特性和功能没有很好的了解,请列出它们并创建它们的层次结构
  3. 熟悉代码,我推荐以下方法:
    • 了解其不同组件的代码从哪里开始后,试着弄清楚方法调用的层次结构(在Eclipse中你可以通过按F3轻松跳转源代码定义)
    • 稍后你也可以这样做,在调试代码时,它会自动跳转到定义,另外你可以观察程序的状态如何变化

对于单元测试本身,我可以向初学者推荐Clean Code 第 9 章(大约 12 页)。它使用 JUnit 作为示例,并很好地介绍了如何进行良好的测试。

在那里,您将学习 F.I.R.S.T. 之类的东西。原则上,单元测试应该是:

快速、独立、可重复、自我验证和及时

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

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

在进行集成测试之前先从单元测试开始(自下而上),你也可以反过来(自上而下),但既然你说你没有那么多经验,我会坚持下去首先。

最后,去做吧,开始吧。在实际编写测试代码时,您将学得最多、最快。

【讨论】:

    【解决方案2】:
    • 停止。 “..not familiar with the code..”。首先熟悉代码,最重要的是熟悉它的预期功能。您不能重构或单元测试您不熟悉的代码。
    • 因为你之前没有做过单元测试,我建议learning and getting convenient with unit-tests

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

    【讨论】:

      【解决方案3】:

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

      在选择要测试的代码区域方面。从高商业价值领域开始。哪个功能最重要?你要确保你有一个强大的代码测试集。

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

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

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

      对于验收测试,还有多种框架可以提供帮助。对于 Web UI 测试,Selenium 是相当标准的。还有像 Fitnesse 这样的工具可以进行更多的表格驱动测试。

      还有一些常见的框架可以帮助提高代码覆盖率 - 想到 Cobertura、Emma、Clover。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-08
        • 1970-01-01
        • 1970-01-01
        • 2014-09-05
        • 2016-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多