弱者才会相信运气,强者只相信因果

0%

单元测试 - 简介

测试的类型

  • 单元测试 Unit Test
  • 集成测试 Integration Test
  • 端到端测试 End-to-end Test
  • 用户接受性测试 Acceptance Test

什么是单元测试?

  • “单元测试”是一段由开发人员编写的测试代码,用于测试尽可能小的一个功能。
  • “单元测试”保证了
    • 干的事儿和你想的一样,和需求一致
    • 并且以后也保持如此
  • 根据输入和输出,一个功能可能需要有多个单元测试。

##为什么写单元测试?

  • 实现简单
  • 运行快
  • 稳定性强
  • 投入少回报高

都要测些什么?

  • 测试正面情况(Positive)
  • 测试负面情况(Negative)
  • 测试分支(Branching)
  • 测试边界值(Edge Cases)

##怎么写?

单元测试工具

  • Jest
    • Facebook 出品
    • 适用于任何 JavaScript/TypeScript 项目
    • 快!

基础工具

  • describe() 一个测试套件 (Test Suite)
  • it() 一个测试用例 (Test Case)
  • expect() 一个断言 (assertion)
    • toBe(), toEqual(), toMatch(), …

简单的单元测试

其他工具

  • Jest
    • jest.fn()
  • Sinon
    • fake/stub/mock

复杂的单元测试

越来越多的依赖

  • 依赖注入 Dependency Injection
    • 依赖反转原则 Dependency Inversion

什么是好的单元测试?

  • 跑得快
  • 不容易坏
  • 一目了然
  • 抓得住 Bug!
  • 投入产出比得当

常用原则

  • 一个测试用例测一件事(单一责任原则)
  • 描述清晰,言简意赅
  • 没有 if/for/while…
  • 业务逻辑里没有测试逻辑(测试不该影响业务实现)
  • (未完待续。。。

开头难

  • React/Node/Cocos,结构迥异。
  • 不同类型的测试对象,适用的方法不一样。
  • 每个人都有自己的想法,测试的方式八仙过海。

总结经验

  • 写测试 -> 总结经验 -> 推广好的测试方式。
  • 改进工具,降低测试门槛。
    1. 增加通用的测试工具函数/类 (Utilities)
    2. 利用开发工具自动化
      1. TS Lint 提示/自动生成测试

##测试驱动开发
Test-driven Development

资源