在测试间谍的情况下,存根和模拟之间有什么区别? (茉莉花)

时间:2012-08-22 10:31:32

标签: javascript jasmine

我正在阅读这份文件sinonjs.org,而且我不清楚存根和嘲笑之间的区别 有人可以用简单的单词和一些例子解释我存根和模拟之间的区别吗?

P.S .:
我已经阅读了What is the difference between mocks and stubs ( JMock),但答案没有例子。

2 个答案:

答案 0 :(得分:2)

我将尝试用几句话解释:

  • mock:如果要验证SUT中的协作,请使用它。您必须模拟协作者,然后验证协作是否已完成。

    var collaborator = {};
    collaborator.collaboration = sinon.mock();
    SUT.setCollaborator(collaborator);
    SUT.play();
    collaborator.collaboration.verify();
    
  • 存根:如果你需要一个合作者来使用它,你可以使用它,但测试不是测试合作。

    var collaborator = {};
    collaborator.collaboration = sinon.stub().returns(1);
    SUT.setCollaborator(collaborator);
    SUT.play();
    

存根和模拟下的技术是相似的,不同之处在于测试的意图。

来自http://sinonjs.org/docs/#mocks

  

模拟具有可能无法通过测试的内置期望。从而,   他们执行实施细节。经验法则是:如果你   不会为某些特定的调用添加断言,不要嘲笑它。用一个   而不是存根。

答案 1 :(得分:2)

下面的重要说明将帮助您了解间谍,存根和嘲弄之间的确切区别:

  • 间谍,它提供有关函数调用的信息,而不会影响其行为
  • 存根,类似于间谍,但完全替代了该功能。这使得有可能 使存根函数执行您喜欢的任何操作—引发异常,返回特定的 值等
  • 模拟,通过合并间谍和存根使替换整个对象更加容易