最近,我读了很多关于合同和协作测试的文章(主要来自J.B. Rainsberger)。为了把它放进去,我开始了一个小项目。
根据我的理解,契约测试的责任是确保实现遵守其接口固有的契约。换句话说,它鼓励利斯科夫替代原则。
模仿一个对象合作者,基本上就是对它进行假设。现在,如果这些假设改变了,会发生什么?如果我这样模拟使用Mockito的合作者(这与存根的作用相同):
when(collaborator.doSomething(someArgument)).thenReturn(someValue);当我修改collaborators接口(也就是它的契约)时,我不会注意到这些变化。
因此,我的问题是:当伪造协作者为被测系统提供间接输入时,应该使用存根来防止未被注意到的接口/契约更改,这是正确的吗?
下面是我已经检查过的一些链接:
removing-the-integration-test-scam-understanding-collaboration-and-contract
writing contract tests in java differently
我希望我说得足够清楚,如果不够清楚,我会尽我最大的努力让它变得更加透明。提前感谢你们所有人。
发布于 2012-12-04 20:48:02
Stubs和Mock之间有明显的区别。
存根是一个替身,不能改变测试结果。例如,传递给主题的输入参数。
另一方面,mock可能会导致测试失败。它是测试对象间协作性的基础。如果未满足预期的协作,则测试将失败。
因此,在您的问题的上下文中,对系统的间接输入应该是存根。
https://stackoverflow.com/questions/13692324
复制相似问题