为什么在使用 Google 关闭模拟时需要同时调用重播全部和验证全部

Why do you need to call both replayAll and verifyAll when using Google Closure mocks?

本文关键字:全部 调用 验证 Google 为什么 模拟      更新时间:2023-09-26

使用Closure的模拟读取代码,我对语法感到非常困惑。许多看起来像这样:

  mockChart();
  // Test
  this.mockControl.$replayAll();
  this.mainMethod(testData);
  // Verify
  this.mockControl.$verifyAll();
  // lots of asserts

我不明白为什么人们会同时调用重播然后进行验证。听起来重播实际上是在做记录工作,我本来以为已经开始了。

该流程与我唯一熟悉的其他框架 Mockito 略有不同,我还没有找到这个级别的好文档(只是类级别的 jsdoc)。

你可以认为在用闭包模拟某些东西时有两个阶段。

在第一次测试中,测试会通知模拟框架预期哪些调用以及它应该如何响应它们。在此阶段调用mockFoo.doTheThing()将在Foo模拟上添加对doTheThing的预期调用。

第二个过程中,模拟框架在测试运行时记录调用。在此阶段调用mockFoo.doTheThing()将记录调用doTheThing的事实,并可能运行在第一阶段添加的一些测试代码。

第一阶段在创建MockControl对象时开始,在调用$replayAll时结束。第二阶段在调用$replayAll时开始,在调用$verifyAll时结束,此时模拟框架会检查是否进行了所有预期的方法调用。