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