据我所知,从极限编程和单元测试中,测试必须由另一个开发人员在另一个开发测试方法之前完成(或者来自相同的开发人员,但测试必须在方法实现之前编写)。嘲笑还是不嘲笑?
好吧,看起来不错,我们只需要测试一个方法是否具有良好的行为,当我给它一些参数。
但理论和实践之间的区别在于,在理论上不存在但在实践中有...
的第一次,我试图测试,我发现它在某些情况下很难由于对象之间的关系。我发现嘲笑的做法,我发现它非常有用,但一些概念让我怀疑。
首先,嘲讽隐含的说:“你知道该方法如何运行,因为你必须知道它需要什么其他对象......”。那么,从理论上讲,这是我的朋友鲍勃写的测试,他只知道,当我给它“john”字符串时,该方法必须返回true ...这是我使用dao代码访问数据库而不是使用散列表在内存中...
我的可怜的朋友Bob会如何写测试?他会期待我的工作......
好吧,似乎不是纯粹的理论,但无论如何。但是,如果我看看很多模拟框架的文档,它们允许我测试一个方法被调用的次数和顺序! ouch ...
但是,如果我的朋友鲍勃必须测试这种方法,以确保良好的依赖关系,方法必须写在测试之前,不是吗?
哼...帮助我的朋友鲍勃...
我们什么时候停止使用模拟装置(为了验证等)? 当模拟机制有用吗? 理论,实践和模拟:什么是最好的平衡?
尽管如此,Bob需要指定支持测试方法的事实并不令人满意。事实上,通过指定您所谈论的合约,Bob将会定义测试方法的实际实施。那不是他的工作。使用接口并不能真正解决问题。[Komarro](http://code.google.com/p/komarro/)试图对此问题进行一些改进。看一看... –