繁体   English   中英

从零开始对未经测试的代码执行单元和集成测试的方法

[英]Approach to perform unit and integration tests from Scratch for untested code

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

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

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

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

由于我是独立工作,因此如果我有一些策略,技巧,建议以及应该推荐的工具,我将不胜感激。

先到先得:

  1. 了解架构,主要成分是什么?
  2. 如果您对该程序提供的功能没有很好的了解,请列出它们并创建它们的层次结构
  3. 熟悉代码后,我建议采用以下方法:
    • 在了解了其不同组件的代码从何处开始之后,请尝试弄清楚方法调用的层次结构(在Eclipse中,您可以通过按F3轻松跳转源代码定义)
    • 稍后,您可以在调试代码时执行相同的操作,这样它将自动跳至定义,此外您还可以观察程序状态的变化

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

在这里,您将学习诸如FIRST原则之类的东西,即单元测试应为:

快速,独立,可重复,自我验证且及时

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

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

科贝图拉

从单元测试开始,然后再进行集成测试(自下而上),也可以采用其他方法(自下而上),但是由于您说的没有那么多经验,我将坚持第一个。

最后,就去开始吧。 在实际编写测试代码时,您将学到最多,最快的东西。

  • 停止。 ..not familiar with the code.. 首先熟悉代码,最重要的是熟悉其预期功能。 您不能重构或单元测试您不满意的代码。
  • 由于您之前没有进行过单元测试,因此建议您学习并方便使用单元测试

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

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

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

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

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

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

对于验收测试,还有各种框架可以提供帮助。 对于Web UI测试,Selenium是非常标准的。 还有诸如Fitnesse之类的工具,可以进行更多的表驱动测试。

还有一些通用框架可帮助覆盖代码-我想到了Cobertura,Emma和Clover。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM