`
vipshichg
  • 浏览: 266713 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

单元测试里的 5 个错误

    博客分类:
  • java
阅读更多

当我第一次听说可以使用框架比如JUnit来进行单元测试的时候,我惊叹这真是一个简单而强大的概念。它取代了随机测试,使你可以保存你的测试代码,并按照需要随时运行它们。按照我的理解,关于单元测试并没有多少产生误解的可能。但是过去的几年中,我确实见过几种或多或少不太正确的单元测试使用方式。这里按照重要程度,列出5条:

 

 

1. 跟协作逻辑一起来测试算法。如果跟协作逻辑代码分离开来,那么算法逻辑是最容易测试的。否则在你的逻辑被测试之前,你就不得不先进行诸如通过任务队列提交一个任务之类的工作。 任务队列部分只会使事情变得复杂。除非你想测试任务队列本身,否则你就应当把调用run方法时所执行的逻辑剥离开来,并对它进行单独测试。那样,不论是编码还是测试都会更易于编写和管理。

 

2. Mock测试太多。也许单元测试的最大好处就是它迫使你编写能够独立测试的代码。也就是说,你的代码会变得模块化。当你把你要处理的对象的周围的一切都模拟了,就没有什么能迫使你去把各部分分离开来。你会发现这样写出的代码,你很难在外围添加独立的部分 – 因为所有东西都纠缠在一起。 ”真是讽刺 – 模拟测试框架越强大,你在改进设计时所感受到的压力就会越小。”

 

3. 不使用断言。有时我会看到一些测试,里面创建了一个对象,调用了一些方法,然后,就没有然后了。也许它是在循环里这样做的,而且在创建和调用上会有些差异。但是,却没有用断言来做任何检查。这就完全失去了意义 – 没有检查你的代码是否按照预期进行工作的。当然,代码是运行了,但是仅此而已。如果抛出了一个异常,我们会注意到它,但是却不会验证其它任何事情。

 

4. 在测试代码中遗留print语句。我把这视为手工测试的后遗症 – 你希望看到对象的值来判断它们是否正确。但是所有的检查都应当使用断言来完成。如果单元失败了,你也能看到它,因为这个测试也会失败。当测试通过时,什么也不应当打印出来。在编写测试代码时,使用print语句有时是有用的。但是在需要用print的地方应当设置一个标志位,用来在进行测试的时候屏蔽它。

 

5. 查看日志信息,而不是运行结果。 还好这并不普遍,但是我却见过一个非常有能力的开发人员这么干过。要知道,真正重要的是方法的运行结果,而不是日志中都打印了什么,因为即使代码中有错误,测试也可能会通过。好了,说的很明白了。

 

  后面3个问题都很容易规避。头2个问题则需要付出更多努力,但是会得到良好分离的代码。祝测试愉快!

4
1
分享到:
评论

相关推荐

    单元测试实施规程 软件单元测试

    5. **文档和电子媒体管理**:单元测试的相关文档,如测试规范书和质量评价报告,应参照《单元测试标准》、《单元测试书及质量评价报告制作标准》和《电子媒体管理规程》进行管理和存储,确保文档的安全性和一致性。...

    Tessy单元测试提高软件质量

    3. 单元测试的结果分析:分析单元测试的结果,检测软件中的错误和缺陷。 4. 单元测试的修复:根据单元测试的结果,修复软件中的错误和缺陷。 分类树方法 分类树方法是一种系统地确定单元测试用例的方法。该方法...

    单元测试说明模板

    单元测试可以帮助开发人员早期发现代码中的错误和缺陷,从而减少了软件开发的时间和成本。 在本文档中,我们将详细地介绍单元测试的设计规格和测试用例规格,以便为XX项目的单元测试活动提供指导。单元测试设计规格...

    软件单元测试入门与实践,软件单元测试入门与实践 周立功,C,C++

    单元测试是一种软件测试方法,它将程序的不同功能模块分解为独立可测试的单元,然后对每个单元进行单独验证。这样可以确保每个模块在集成到整个系统之前都已达到预期的正确性。对于C和C++这样的静态类型语言,单元...

    白盒测试方法与单元测试

    当进行单元测试时,开发者或测试人员会编写小规模的测试用例,这些用例直接针对代码的特定部分进行,而白盒测试提供了一种方法来深入这些代码的内部,确保其逻辑正确性。 白盒测试的分类包括多种方法: 1. **代码...

    C++单元测试简单示例

    在压缩包中的"单元测试示范"可能包含了一个或多个测试文件,每个文件代表一个测试套件,里面包含了针对特定功能或类的多个测试用例。通过查看这些示例,你可以看到如何实际应用上述概念,如定义测试用例、编写断言...

    单元测试

    在进行单元测试时,有以下几个关键概念和技术: 1. 测试框架:为了简化单元测试的编写,通常会使用专门的测试框架。例如Java领域的JUnit,Python的unittest,C#的NUnit等。这些框架提供了一套结构化的API,帮助...

    精心汇总的5类软件模版下载(单元测试计划、单元测试报告、测试方案、功能测试报告、性能测试报告)

    本资源包精心汇总了五类重要的软件测试文档模版,包括单元测试计划、单元测试报告、测试方案、功能测试报告以及性能测试报告,这些都是软件测试工作中不可或缺的部分。 1. **单元测试计划**: 单元测试计划是软件...

    JUnit单元测试原则 单元测试工具

    单元测试能够帮助开发者确保每个单元都按预期工作,并且在整个开发过程中保持代码质量。 #### 二、JUnit单元测试原则 1. **不测试get和set方法**: - 对于简单的getter和setter方法,如果没有复杂的逻辑,一般不...

    单元测试报告模板.doc

    单元测试报告的目的是提供一个透明、详细的记录,让团队成员、管理者和其他利益相关者了解测试的状态,发现和解决问题,以及持续优化软件质量。通过详尽的测试报告,可以有效地管理和控制项目风险,确保软件产品的...

    lua单元测试框架测试用例实例

    单元测试能够帮助开发者验证代码的各个独立部分(即“单元”)是否按照预期工作,从而在早期发现并修复错误。 Busted是一个流行的Lua单元测试框架,它提供了简洁的语法和丰富的功能,使得编写和运行测试用例变得...

    【软件测试】: 单元测试:模块接口、局部数据结构、路径、边界条件、错误处理、代码书写规范.doc

    本文将从单元测试的定义、 importance、步骤、模块接口测试、局部数据结构测试、路径测试、边界条件测试、错误处理测试、代码书写规范等方面进行详细的解释。 单元测试的定义 ---------------- 单元测试是指对软件...

    单元测试代码全

    单元测试是一种自动化测试,它的主要目标是确保每个代码模块在独立运行时都能正确执行。通过单元测试,开发者可以在早期发现并修复错误,提高代码质量和可维护性。此外,单元测试还能作为文档,明确说明代码的预期...

    基于RTRT单元测试

    **单元测试**是在软件开发过程中的一项基础性测试活动,它的主要目的是确保软件中的各个最小可测试单元(通常指一个单独的功能模块)能够按照预期正确运行。这种测试方式有助于尽早发现并修复软件缺陷,提高软件质量...

    软件单元测试讲义ppt

    《软件单元测试讲义》是一份深入探讨软件开发中单元测试...总结,《软件单元测试讲义》这份资料为开发者提供了一个全面了解和掌握单元测试的平台,通过学习和实践,我们可以更好地确保代码质量,提升软件项目的成功率。

Global site tag (gtag.js) - Google Analytics