0

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

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

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

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

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

4

3 回答 3

3

先到先得:

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

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

在那里,您将学习到 FIRST 原则之类的东西,即单元测试应该是:

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

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

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

科贝图拉

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

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

于 2012-07-05T17:53:07.427 回答
2
  • 停止。“ ..not familiar with the code..”。首先熟悉代码,最重要的是熟悉它的预期功能。您不能重构或单元测试您不熟悉的代码。
  • 由于您之前没有进行过单元测试,我建议您通过 unit-tests学习并获得方便

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

于 2012-07-05T17:45:00.060 回答
2

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

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

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

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

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

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

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

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

于 2012-07-05T17:59:27.320 回答