21|DI Container(9):怎样重构测试代码?
通过 TDD 获得的测试,可以驱动我们的开发,但不代表获得的是一个良好的 Test Case 组合
TDD 主要是为我们开发生产代码提供驱动力
天然得出的结果并不能认为是很好的 Test Case
所以需要对 Test Case 进行重构
- 消除在构造 TDD 过程中留下的不一样的印记(架构选择、设计决策等)
- 使 Test Case 能真实反应代码的意图
- 按测试意图将零散的测试方法收集到一起(放入同一个 Nested 中或者单独的测试类中)
- 同一个上下文中,测试粒度尽量保持一致
- 清理没有用的测试
按测试意图将零散的测试方法收集到一起(放入同一个 Nested 中)
同一个上下文中,测试粒度最好是一样的
22|DI Container(10):怎样将大粒度的测试重构为等效的小粒度测试代码?
测试变文档
- 从文档角度优化测试
- 使用 @Nested 将功能分组
- 测试天然不是文档,而是你实现过程的记录
- 对测试进行足够提取和刻意的组织后才能变成真正的文档
23|DI Container(11):如何对ContainerTest进行文档化改造?
- 经过梳理之后得到可执行的测试文档
- 通过抽取方法起到注释的作用
24|DI Container(12):如何增补功能?
|
|
27|DI Container(15):如何封装类型判断逻辑?
概念缺失的两种封装方式
- 行为封装
- 数据封装
32|DI Container(20):如何对代码和测试进行重构?
建模上的缺陷
- 模型冗余:相同的计算逻辑同时出现在构造方法、实现方法中
- 模型不能真正反应需求上要解决的问题
- 对概念上的封装存在缺失
- 在工作中很难发现,缓慢的让代码进入到一个滑坡状态、越来越复杂
33|DI Container(21):如何处理Singleton生命周期部分的功能?
声明参数中的泛型继承哪个父类
|
|
34|DI Container(22):如何对Bind的逻辑进行重构?
测试覆盖率
追求功能点 100% 覆盖率,而不是每行代码的覆盖率