单元测试和单步调试


学习单元测试,mocha使用,测试驱动开发(TDD) 和行为驱动开发(BDD)
学习并运行单步调试

1 单元测试

1.1简介

  代码部署之前,进行一定的单元测试是十分必要的,这样能够有效并且持续保证代码质量。而实践表明,高质量的单元测试还可以帮助我们完善自己的代码。
  单元测试针对程序模块,进行正确性检验的测试。其目的在于发现各模块内部可能存在的各种差错。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。
  测试用例是一组单元测试,测试用例是指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。其内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,最终形成文档。

1.2 单元测试的内容

模块接口测试:对通过被测模块的数据流进行测试。为此,对模块接口,包括参数表、调用子模块的参数、全程数据、文件输入/输出操作都必须检查。
局部数据结构测试:设计测试用例检查数据类型说明、初始化、缺省值等方面的问题,还要查清全程数据对模块的影响。
路径测试:选择适当的测试用例,对模块中重要的执行路径进行测试。对基本执行路径和循环进行测试可以发现大量路径错误。
错误处理测试:检查模块的错误处理功能是否包含有错误或缺陷。例如,是否拒绝不合理的输入;出错的描述是否难以理解、是否对错误定位有误、是否出错原因报告有误、是否对错误条件的处理不正确;在对错误处理之前错误条件是否已经引起系统的干预等。
边界测试:要特别注意数据流、控制流中刚好等于、大于或小于确定的比较值时出错的可能性。对这些地方要仔细地选择测试用例,认真加以测试。
  此外,如果对模块运行时间有要求的话,还要专门进行关键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的因素。这类信息对进行性能评价是十分有用的。

1.3 javascript单元测试框架

1.3.1 简介

  node-red-node-test-helper是mocha是JavaScript的测试框架的单元测试框架。mocha也是node-red的单元测试框架。
  但在写单元测试文件的时候,需要用到node-red的本身自带的node-red-node-test-helper,但是这个也不是require引用他,而是需要他,就把他拿过来。
  但是mocha呢是node-red的外部的测试框架,可测的范围比test-hepler更全。可二者也是相辅相成的,一个测试文件的写成需要两个一起完成。
  mocha的使用是在package.json 文件引入的,不在需要在测试文件里在require一下。
mocha与should和it,assert…相比,后两者可以修工队和工具的关系。
  这也就是有为什么在调试控制台,如果是run test就是或出现 npm run test .而launch temperature就是D:\node\node.exe .\temperature2.js

1.3.2 mocha

  mocha是一款功能丰富的javascript单元测试框架,它既可以运行在nodejs环境中,也可以运行在浏览器环境中。javascript是一门单线程语言,最显著的特点就是有很多异步执行同步代码的测试比较简单,直接判断函数的返回值是否符合预期就行了,而异步的函数,就需要测试框架支持回调promise或其他的方式来判断测试结果的正确性了。
  mocha可以良好的支持javascript异步的单元测试。mocha会串行地执行我们编写的测试用例,可以在将未捕获异常指向对应用例的同时,保证输出灵活准确的测试结果报告。
  一个简单的测试包含describe和it,describe声明了一个TestSuit(测试集合) ,而且测试集合可以嵌套管理,而it声明定义了一个具体的测试用例。

1.3.3 assert

具体可以参考一下网址:
  assert为断言库,除了assert还有如下几种,Mocha允许你使用你喜欢的断言库。

  • should.js - BDD风格贯穿始终
  • expect.js - expect() 风格的断言
  • chai - expect()、assert()和 should风格的断言
  • better-assert - C风格的自文档化的assert()
  • unexpected - “可扩展的BDD断言工具”
    参考网址:link.

1.3.4 should.js

  Node.js自带的断言库Assert提供的函数有限,在实际工作中,Should等第三方断言库则更加强大和实用。Should能够:

  • 验证对象是否存在某属性,并验证其取值;
  • 验证对象是否存在某个嵌套属性,并使用链式方式验证其取值。
    参考网址: link.

1.4 测试驱动开发和行为驱动开发

  mocha的测试接口类型指的是集中测试用例组织模式的选择,包括BDD行为驱动开发(Behavior Driven Development),TDD测试驱动开发(Test-Driven Development),Exports,QUnit 和 Require-style 几种。
参考文献:https://www.cnblogs.com/tzyy/p/5729602.html

1.4.1 测试驱动开发(TDD)

  测试驱动开发是敏捷开发中的一项核心技术与实践,也是一种设计方法论。TDD 原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD的基本思路就是通过测试来推动整个开发的进行,但测试开发并不是单纯地测试工作,而是把需求分析,设计,质量控制量化的过程。TDD首先考虑使用需求(对象,功能,过程,接口等),主要是编写测试用例框架对功能的过程和接口进行设计,而测试框架可以持续进行验证。
  TDD的定义和不好走看起来很简单:需求被转化成一系列明确的测试用例,然后我们撰写代码使测试依此通过,最后重构使得增量代码和存量代码和平共处,满足设计规范和原则(比如DRY,OCP,…)。然后周而复始,不断迭代,直至整个项目完成。

1.5 行为驱动开发(BDD)

导致软件研发项目失败的原因是多种多样的,但最终结果可以分为两类:

  • 没能正确的研发软件。
  • 没能研发正确的软件。
      没能正确的研发软件,主要是交付满足质量要求的软件,软件缺陷多且难以维护。没能研发正确的软件,主要表现在费用超出预算、软件产品延期交付、软件功能遗漏、产品功能错误或交付了客户根本不用的产品功能。
      有鉴于此,行为驱动开发(Behavior Driven Development,BDD)借鉴了敏捷和精益实践,让敏捷研发团队尽可能理解产品经理或业务人员的产品需求,并在软件研发过程中及时反馈和演示软件产品的研发状态,让产品经理或业务人员根据获得的产品研发信息及时对软件产品特性进行调整。BDD帮助敏捷研发团队把精力集中在识别、理解和构建跟业务目标有关的产品特性上面,并让敏捷研发团队能够确保识别出的产品特性能够被正确设计和实现出来。

2 单元测试

2.1 简介

  对于开发者来说,在开发应用程序的过程中,往往为了开发方便和解决bug需要借助于编程语言的调试功能。在调试的时候我们可以使用VScode进行单步调试。
   在vscode的菜单中点击“运行”,点击“添加配置”,然后选择我们所需要配置调试的语言(先安装好相应插件)。这时会自动生成一个launch.json文件。打开相应的节点文件夹,选择调试选项,create a lunch.json file。

2.2 相关步骤

在这里插入图片描述
   在调试的时候会出现如上图文件夹,现在我们来 一 一 介绍文件夹的作用。红色剪头5:添加配置到工作区就是会把需要配置的节点写在了4类型里,4里出现以后才能用1,2,3就是1,2下边test所指的文件。
1:箭头1 代表打开调试文件,这个时候打开的并不是测试用例的文件夹,打开的是除了node-red结构的,单独写的文件夹。这个时候打开单独调试的文件夹进行单步调试。
2:打开工作区这个文件夹就是看里边有多少单步调试的程序。
3:打开箭头三的文件夹就是打开测试程序文件,调试js文件,然后进行单步调试。
4:添加配置,为所创节点的添加配置。
5:工作区的配置。

2.2.1单步调试控制台

在这里插入图片描述
  在控制台红框圈出来的是执行,控制台上边圈出来的绿框是调试。调试是调试,执行是执行。
  如果进行单步调试,可以先打断点,断点一步步调试,到了断点会不在往下执行。也可以不打断点,不打断点的话,执行下一步就会进入程序里边。
  如果出现错误就会在下边的调试台显示出来,然后进入程序一步步调试。或者根据错误行数进行定位,单步调试。

2.2.2 异常断点

在这里插入图片描述
  在vscode的debugger面板勾选的uncaught exceptions和caught exceptions可以添加异常断点,在抛出异常为捕获或者被捕获是断柱。用来调试一些发生异常的代码是很有用。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值