高级测试技巧与实践
1. 处理时间依赖代码
处理时间依赖代码时,重新设计并非唯一方法。可以使用PowerMock或JMockit等工具让 Calendar 类返回所需的值,但不推荐这种做法,因为它不能改善被测系统(SUT)的代码,还会使当前实现固定化。
1.1 合理测试每个日期
在处理时间依赖代码时要格外谨慎,具体表现为:
- 编写单元测试时要严谨。
- 运行测试时要考虑至少未来几年的情况。如果单元测试速度极快,不妨运行未来5年的测试,这样能确保在接下来的5年里,该代码不会出现与时间相关的问题。
1.2 应对时间依赖SUT的方法
解决时间依赖SUT的问题很简单:将时间作为SUT的协作者,然后用测试替身替换它。这样做可以改进设计,使SUT摆脱时间管理知识,专注于业务逻辑,之后就可以采用标准方法处理所有协作者。不过,这种技术仅能解决单元测试层面的时间问题,在更高级别的应用测试中,还会遇到服务器和数据库的不同时区、数据库触发器、仅在夜间特定时间运行的外部进程以及安全证书过期等问题,但这些都不会影响单元测试。
2. 测试集合
有时SUT的方法会返回集合,其内容是业务逻辑的结果,需要对其进行测试。
2.1 TDD逐步测试集合内容
使用测试驱动开发(TDD)测试集合内容时,建议逐步进行:
1. 用简单断言验证返回的集合不为空。
2. 让测试通过,返回一个新集合。
3. 添加断言验证集合元素数量是否符合预期。
4. 开始验证集合内容。
以下是示例代码:
超级会员免费看
订阅专栏 解锁全文
2604

被折叠的 条评论
为什么被折叠?



