使用模拟 Class 进行单元测试

Unit Testing with a Mocked Class

我看过的一些网站指出,当您(开发人员)正在实施您的 class (X) 时,它依赖于另一个 class (Y) 的信息,并假设 class (Y) 尚未由您的开发团队开发,那么在您的 class (X) 单元测试中,您应该模拟 class (Y).

我想知道的是当最终 class (Y) 确实被开发团队实现时你应该做什么? class (X) 的开发人员现在是否必须回到 he/she 创建 class (Y) 的模拟并调用真实对象的单元测试?

并且如果我们要正确看待真正的开发时间表 class (X) 可能在 class (Y) 和 class 的开发人员之前一个月或更长时间实施(X) 还为 class 编写了单元测试 (X) 可能已经转移到分配给 him/her 的其他任务;这个人现在怎么能分配时间回去重新投入时间来重写他们的旧单元测试——这难道不是管理上的噩梦吗?

所以,我想说的是,如果您简单地保留模拟,您可以在测试中实现更好的分离和独立性——您可以通过这种方式进行真正的单元测试,而如果您要用实例替换模拟实际 类 然后你正在创建集成测试。这真的是两种思想流派,mockist vs. classical。就个人而言,我更喜欢 mockist 风格,并且很高兴知道我的测试更能适应变化,因为我是这样写的。如果我做更多的经典风格测试,就会有更多测试失败的原因(可能是我的测试对象依赖于其行为的任何底层实现的变化)并且当测试失败时,它会更少清楚到底是什么导致了失败。