单元测试

单元测试最大的特点是isolated。即测试的pass/fail仅由对应单元的实现决定,不依赖于外部实现。

  • 单元测试应该尽可能高效(单个单元测试在75ms以内)
    • 尽可能简单
    • 不存在和其它测试的依赖
    • mock外部依赖
  • 单元测试应该尽可能简单,具体而言应该减小cyclomatic complexity(给定方法中可能的执行路径)
  • 单元测试内部不应该重复实现逻辑
  • 单元测试要求良好的可读性,单元测试是另一种形式的文档
    • 使用Arrange, Act, Assert模式
      • 设置对象,设置mocks
      • 调用被测方法
      • 断言结果
    • 每个测试方法单个逻辑断言
    • 避免使用magic numbers
  • 单元测试应当deterministic,为了保证这一点,测试用例不能依赖
    • 其它测试用例
    • 环境值,例如: 当前时间,机器配置
    • 外部依赖,例如: 文件系统,网络
  • 单元测试应当作为构建过程的一部分
  • 通过test double(测试替身)解决外部依赖
    • 不同的test double类型: mocks, stubs, spies…
  • 单元测试应当使用合理的命名惯例
  • 单元测试和实现之间应当是松耦合关系

reference

  • (unit-testing-best-practices)[https://www.testim.io/blog/unit-testing-best-practices/]