Learning TypeScript 0x6 应用测试

软件测试术语

断言

.断言是一个条件,它是必须被测试确认的一段代码的行为是否与期望相符,或换句话说是否与要求一致。

class Math1 {
    public static pow (base: number, exponent: number) {
        var result = base
        for(var i = 1; i < exponent; i++) {
            result = result * base
        }
        return result
    }
}

该函数必须返回底数的指数幂 

var actual = Math1.pow(3, 5)
var expected1 = 243
var asertion1 = (Math1.pow(base1, exponent1) === expected1)

底数没有被用作指数

var actual = Math1.pow(5, 3)
var expected2 = 125
var asertion2 = (Math1.pow(base2, exponent2) === expected2)

如果两个断言都合法,那代码就是满足需求的,并且我们知道他会预期那样工作
 

var isValidCode = (asertion1 && asertion2)
console.log(isValidCode)

测试规范

一个详细的清单,包含了需要测试的场景,这些场景将如何被测试,它们应该怎么被测试等。

测试用例

决定一个程序中的功能是否按照原始期望工作的一些条件。断言是一个条件,而测试是一组条件。

测试套件

一个测试套件是许多测试用例的集合。测试用例只是针对某一个具体的测试场景,一个测试套件可以包含多个测试用例来覆盖更多的测试场景。

测试监视

某些测试框架提供的功能。它允许我们包裹一个函数,并且记录它的送情况(输入,输出和被调用的次数)

替身

替身对象指测试执行时被传入但并没有实际用到的对象。

测试桩

桩(sub)是测试框架提供的一种功能。测试桩也允许包裹一个方法然后观察它的使用情况。和测试监视不一样的是,当使用测试桩包裹一个函数时,这个函数的功能会被新的行为替代。

模拟

模拟(mock)很容易和测试桩(sub)混淆。

他们之间有两个不同点,其中一个是测试结果的验证方式不同:一个是状态验证,一个是行为验证。另一个方面是测试与设计哲学完全不同:一个是传统型的,一个是测试驱动开发的mockist

  • 测试桩为被测试的程序提供输入值,可让被测试程序能扮演另外的程序
  • 模拟为测试提供输入来决定测试是否通过

测试覆盖率

测试覆盖率是指程序中有多大比例的代码通过自动化测试被测试到。

实战

Gulp

任务运行器——运行一些必要的任务来执行测试

npm install gulp -g

 Karma

测试运行器,使用Karma自动执行测试。(可以在协作开发中被持续集成构建服务触发)

npm i --save-dev karma
npm i --save-dev karma-coverage

Istanbull

指出哪一行代码在自动化测试中被测试到的工具,它可以生成测试覆盖率报告。

一般建议,整个持续至少达到75%的测试覆盖率,而很多开源项目都达到百分之百的测试覆盖率。

Mocha

可以用来很方便创建测试套件、测试用例和测试规范。

npm i --save-dev mocha karma-mocha

Chai

一个支持测试驱动开发(TDD)和行为驱动开发(BDD)测试分割的断言库。Chai的主要目标是减少一个测试断言需要的工作量,并且使测试更可靠。

npm i --save-dev chai karma-chai

Sinon.js

提供一组API(测试监视、测试桩和测试模拟),可帮助我们独立地测试一个组件。独立地测试软件模块非常困难,因为通常模块之间有很高程度的耦合,但通过Sinon.js这种模拟框架就可以做到。

npm i --save-dev sinon karma-sinon

PhantomJS

无界面浏览器,可以通过命令行执行,非常容易与任务运行器和持续集成服务集成。

npm i --save-dev phantomjs
npm i --save-dev karma-phantomjs-launcher

Selenium和Nightwatch.js

Selenium是一个测试运行器,但是它被特别设计只运行叫做端对端(E2E)测试的特定测试。Nightwatch可用来做E2E测试,他将自动运行Selenium

Nightwatch.js是一个自动化测试框架,使用Node.js开发Web程序和网站,它使用了Selenium网络驱动测试API。它是一个完整的浏览器测试解决方案。

npm i --save-dev gulp-nightwatch
npm i selenium-standalone -g
selenium-standdalone install 

测试计划和方法

测速驱动开发 TDD

基本步骤:

  1. 编写一个不通过的测试
  2. 运行这个测试,并保证它不通过
  3. 编写应用代码,让测试通过
  4. 运行这个测试,保证它通过
  5. 运行所有其他测试,保证程序的其他部分没有被破坏
  6. 重复以上步骤

TDD可以极大提高测试覆盖率,减少潜在的错误。

行为驱动开发 BDD

提取TDD的精华,重点是描述并且阐述测试应该关注程序的需求而非测试的需求。理想状态下,鼓励开发者少思考测试这件事,而更多地去思考整个程序。

测试计划和测试类型

测试计划是特定被测试区域内的测试规范的集合。其一个重要目标是定义、指出什么类型的测试对于程序的特定组件是合格的。

测试类型:

  • 单元测试:测试独立的组件,如果组件不独立,可以设置测试模拟和依赖注入尽可能让他在测试中独立。
  • 部分集成测试和整体集成测试:测试一组组件或者整个程序。
  • 回归测试:来确认程序错误是否被修复
  • 性能/加载测试:用来确认程序是否达到性能预期
  • 端对端(E2E)测试:近似整体测试,区别在于E2E测试活动期间,我们会尝试完全模拟与正式用户一样的环境(使用Nightwatch.js 和selenium)
  • 验收测试(UAT):被用来验证系统是否符合用户的所有需求

建立测试基础结构

使用Selenium和Nightwatch.js运行E2E测试

使用Mocha和Chai创建测试断言、规范和套件

BDD的测试风格,要在写实际代码之前就开始写测试

测试异步代码

断言异常

Mocha和Chai的TDD与BDD对比

 使用Sinon.JS编写测试监视和测试桩

测试监视

测试桩

使用Nightwatch.js创建端对端测试

生成测试覆盖率报告

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值