我正在阅读这个文档sinonjs.org,对我来说并不清楚存根和模拟之间的区别。
有人可以用简单的话和一些例子来解释一下存根和模拟之间的区别吗?
PS:
我已经阅读过什么是模拟和存根(JMock)之间的区别,但答案没有例子。
我正在阅读这个文档sinonjs.org,对我来说并不清楚存根和模拟之间的区别。
有人可以用简单的话和一些例子来解释一下存根和模拟之间的区别吗?
PS:
我已经阅读过什么是模拟和存根(JMock)之间的区别,但答案没有例子。
我将尝试用几句话来解释:
模拟:如果要验证 SUT 中的协作,请使用它。您必须模拟协作者,然后验证协作是否完成。
var collaborator = {};
collaborator.collaboration = sinon.mock();
SUT.setCollaborator(collaborator);
SUT.play();
collaborator.collaboration.verify();
stub:如果您的 SUT 需要协作者,请使用它,但测试不是测试协作。
var collaborator = {};
collaborator.collaboration = sinon.stub().returns(1);
SUT.setCollaborator(collaborator);
SUT.play();
stubs 和 mocks 下的技术是相似的,不同的是测试的意图。
来自http://sinonjs.org/docs/#mocks:
模拟带有可能无法通过测试的内置期望。因此,他们强制执行实施细节。经验法则是:如果您不为某些特定调用添加断言,请不要模拟它。请改用存根。
以下重要说明将帮助您了解间谍、存根和模拟之间的确切区别: