• 0
  • 0
分享

在构建软件系统时,测试是软件开发工作流程的必不可少的部分之一。作为软件开发人员,都希望编写的程序按预期工作。程序没有BUG,测试可以协助这个目标的达成。

本文将讨论一种称为单元测试的测试方法。什么是单元测试?应该如何实施?单测优点和局限性是什么?

什么是单元测试

单元测试的目标是隔离程序的每个部分并显示各个部分按预期工作。单元测试是由软件开发人员编写和运行的自动化测试,以确保应用程序的一部分(称为单元)按预期工作。

单元是可以在系统中逻辑隔离的最小代码段。这可以是单个函数、方法、过程、模块、类或对象。通常,一个单元有几个输入和一个输出。单元测试由软件开发人员在应用程序的开发(编码阶段)期间完成。

只有各个部分运行良好,整个系统才能运行良好。通过为最小的可测试单元编写测试,软件开发人员建立了整个系统将按预期工作的信心。一旦软件开发人员编写了单元测试,他们就可以在本地机器上运行它以检查测试是否通过。他们还可以运行所有其他预先存在的测试来检查它们是否仍然通过。

单元测试框架

软件开发人员通常使用单元测试框架来开发用于单元测试的自动化测试用例。单元测试框架是支持编写和运行单元测试的软件工具,包括构建测试的基础以及执行测试和报告结果的功能。有最流行的编程语言的单元测试框架。

在测试用例执行期间,框架记录未通过任何标准的测试并在摘要中报告它们。根据故障的严重程度,框架可能会停止后续测试。

单元测试还可以设置为在代码发布到暂存或生产环境之前在每个新构建上执行。通过这种方式,软件开发人员可以确保只有通过所有单元测试的代码才能进入实时环境。如果在构建过程中任何单元测试失败,软件开发人员可以在尝试再次发布之前先修复问题。

单元测试示例

下面是一个非常简单的例子,说明单元测试如何工作。我们有一个简单的add函数,它接收两个数字作为参数并返回两个数字相加的结果。这里我使用最近新学(其实复习)的Groovy单元测试框架Spock来演示。有兴趣的同学看看旧文章:

  • Maven和Gradle中配置单元测试框架Spock
  • Groovy单元测试框架spock基础功能Demo
  • Groovy单元测试框架spock数据驱动Demo
  • 人生苦短?试试Groovy进行单元测试
  • Spock 2.0 M1版本初探
  • 单元测试框架spock和Mockito应用
  • Groovy动态添加方法和属性及Spock单测
  •     static int add(int i, int j) {

  •         return i + j

  •     }

我们对add函数的非常简单的第一个单元测试如下。

    def "测试add方法"() {
        given: "Have Fun ~ Tester !"

        expect:
        sum == add(i, j)

        where:
        sum | i  | j
        2   | 1  | 1
        1   | -1 | 2
        0   | 0  | 0
    }

然后,我们可以为add函数添加更多单元测试,并使用其他示例输入来覆盖不同的情况,例如负数或无效的输入参数,以检查错误是否得到正确处理。这是一个非常简单的例子,但是,它在实践中展示了单元测试是如何工作的。

单元测试的好处

单元测试是一种软件测试方法,其中测试软件的各个单元、组件或模块以确定它们是否适合使用。因此,它有很多好处。随着软件系统的发展,软件开发人员从单元测试中获益更多。如果在早期开发中进行了适当的单元测试,最终将节省软件开发人员的时间和金钱。

单元测试在开发周期的早期发现问题。这包括软件开发人员实施中的错误。在开始编码之前或首次编写代码时发现错误的成本远低于稍后检测、识别和纠正错误的成本。

单元测试帮助软件开发人员创建更好的软件设计。如果编写得不好,代码可能无法或难以进行单元测试,因此单元测试可以迫使软件开发人员以更好的方式构建功能和对象。编写一套完整的测试的过程迫使软件开发人员仔细考虑输入、输出和错误条件,从而更清晰地定义单元所需的行为。

由于单元测试的模块化特性,软件开发人员可以测试软件系统的各个部分,而无需等待其他部分完成。这将帮助软件开发人员以小的敏捷增量创建他们的软件。

单元测试允许软件开发人员在以后轻松重构代码或升级系统库,并确保现有代码仍然正常工作。软件开发人员所做的任何导致现有单元测试失败的更改都可以快速识别并解决。单元测试检测可能破坏现有工作代码的更改。

单元测试创建系统文档作为积极的副作用。希望了解单元提供哪些功能以及如何使用它的软件开发人员可以查看单元测试以获得对单元接口 (API) 的基本了解。

单元测试限制

尽管单元测试有很多好处,但它也有一些局限性。

单元测试不会捕获软件系统中的每个错误。除非它是一个非常简单的系统,否则很难评估软件系统中的每个执行路径。单元测试仅限于测试单元本身的功能。它不会捕获其他错误,例如集成错误或性能错误。

如果被测单元的核心功能是与系统外部的事物交互,则设置单元测试可能很困难。在单元测试时,诸如数据库、文件系统或外部 API 之类的外部事物可能会带来挑战。软件开发人员可能不得不模拟与外部方的交互,这可能具有挑战性,而且作为测试还不够详尽。

Last

编写单元测试作为系统开发的一部分通常会让人感觉成本高昂且速度缓慢。需要编写更多代码,编写好的单元测试需要时间和精力。开发团队常犯的错误是跳过单元测试。

随着大多数软件系统的增长,它们将受益于广泛的单元测试覆盖范围。单元测试有助于更轻松地添加新功能、重构现有功能以及了解系统的现有单个组件。尽早添加单元测试最终将节省软件开发人员时间以提升效率。


  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 本文主要介绍使用七牛提供的接口把七牛云作为图床,用 Python 实现图片上传和文件上传的脚本实现,可以支持按文件夹批量上传。 搭建过网站的同学,一定都涉及到图片上传和文件上传的问题,最近为了弄图片资源接触了一下云存储,还挺挺好用。 之前如果我们把图片资源存储到本机服务器,那就每次写文章的时候都需要准备一堆的图片,并且要上传到对应的相对目录上去,如果用了云存储(不限七牛),好处就是需要的资源直接上传,然后生成一个链接来使用就行了,Markdown 语法对链接的支持也很好,恩,可以搞一下。 不过,又有了新问题,就是是用云存储,得先经过登录->打开对象存储->打开内容管理->上传...
            1 2 1479
            分享
          • 【聚合概念】相关偶然聚合:模块完成的动作之间没有任何关系,或者仅仅是一种非常松散的关系逻辑聚合:模块内部的各个组成在逻辑上具有相似的处理动作,但功能用途上彼此无关时间聚合:模块内部的各个组成部分所包含的处理动作必须在同一时间内执行过程聚合:模块内部的各个组成部分所要完成的动作虽然没有关系,但必须按特定的次序执行通信聚合:模块的各个组成部分所完成的动作都使用了同一个数据或产生同一输出数据顺序聚合:模块内部的各个部分,前一部分处理动作的最后输出是后一部分处理动作的输入功能聚合:模块内部各个部分全部属于一个整体,并执行同一功能,且各部分对实现该功能都必不可 【耦合概念】相关数据耦合:指两个...
            0 0 1340
            分享
          • 1.你如何用Selenium测试?Selenium+Maven+TestNG+Jekins2.如何解决问题?先思考,然后百度,考虑网速、电脑配置等原因,这题主要看重解决问题的能力和思维。3.你是怎么开发测试框架的?Selenium+Maven+TestNG+Jekins4.做自动化测试的目的?a.用来回归 b.用来监控系统稳定性 c.提高工作效率5.PO模型是怎么做的?pageObject :页面层,操作层,业务层集合成case6.如何判断case是否通过?断言,与预期结果比较7.你项目中有多少case,通过率怎么样?按实际回答,上千个,一般是70-80%左右,8.失败截图的原理是什么?利用监...
            12 13 3587
            分享
          • 刚入行或准备入行软件测试时大都停留在对测试的初步印象,测试就是对一个产品根据已有的用例执行找Bug的过程。当工作过一段的时间后,则对软件测试有了基本的认识,找Bug仅仅是作为一个测试人员最基本的技能。测试还包括根据需求和设计文档进行用例的设计;测试报告的编写和总结、测试报告及时交付;与研发沟通推动Bug及时解决;编写部分自动化测试脚本提高测试效率;测试环境的搭建;测试工具的使用等。同时认识到测试不仅包括基本的功能测试,还有压力测试、稳定性测试、性能测试、安全测试等各种测试方法和技术。随着工作年限和经验的增加,参与过更多的项目,也独立负责过几个模块后,对软件测试有了更高的认识,软件测试除了上面列...
            1 3 1924
            分享
          • 一、先来看最优效果要达到该点,在做接口测试前,做为测试者,我们需要非常明确自己选择测试工具去达到的核心目的。通常情况下可能有以下几个:这里不仅仅只是说明了全流程自动化接口测试实现方案,对于常规的接口测试也进行了罗列开发者调试接口测试人员提前介入测试,尽早发现程序缺陷测试人员对于系统接口回归,确保后台逻辑无缺陷,降低版本迭代风险如是情况1或者2,在实际的项目开发过程中,这其中的空余时间不固定且零散,按照这样的预期,我们期望接口测试工具更为便捷,可以快速的配置出接口测试脚本或用例。这类接口自动化测试工具有:1、PostmanPostman工具的优势清晰的图形界面;结合界面操作可以快速的配置接口请求...
            0 0 2891
            分享
      • 51testing软件测试圈微信