话说昨天看了一篇《Mock Roles, not Objects 》的论文,彻底颠覆了我对mock的理解和认识。这篇论文是jMock作者在2004年发表的,描述了Mock Objects应该如何在TDD的过程中使用。
按照这篇文章的说法,Mock最重要的用途是用于推进纯粹的测试驱动开发。
例如,我们在开发一个对象A的时候,A需要一个service S,但这时S还没有编写实现。于是我们写一个S的mock,用来测试A。
在实现了A之后,我们开始编写service S的实现类,B。我们发现B依赖于service T和U,这时我们又可以mock T和U,用来测试B。
这样,最终我们可以得到一个完整的对象模型。而mock在其中充当的作用就是帮助我们用测试驱动了我们的开发。
文章在介绍了使用mock进行开发的一个实际例子后,列出了一些使用mock的最佳实践和对mock的一些常见的误用。所以如果在测试中大量的使用mock的时候,最好先读读这篇文章。