使用 Kiwi 的 KWCaptureSpy 的实际例子是什么?

What is a practical example of using Kiwi's KWCaptureSpy?

我无法理解使用 Kiwi 的 KWCaptureSpy 的实际应用是什么。我可以做这样的事情并让它通过:

 __block id successJSON;

  KWCaptureSpy *successBlockSpy =
      [HNKServer captureArgument:@selector(GET:parameters:completion:)
                         atIndex:2];

  [[HNKServer sharedServer] GET:@""
                     parameters:nil
                     completion:^(id JSON, NSError *error) {
                       successJSON = JSON;
                     }];

  HNKServerRequestCallback successBlock = successBlockSpy.argument;
  successBlock(@"JSON", nil);

  [[successJSON shouldEventually] equal:@"JSON"];

但这似乎并没有真正测试任何东西。 Kiwi 文档中的示例没有帮助:https://github.com/kiwi-bdd/Kiwi/wiki/Mocks-and-Stubs#capturing-arguments

有人有充分的理由在实践中使用 KWCaptureSpy 吗?

这是一种可能的情况:

  • 您正在使用 RESTful 网络服务,该服务允许您通过 POST /user 更新您要更新的详细信息来更新您的个人资料。
  • 您有一个 HNKUser class 声明了一个 updateFirstName:lastName: 调用网络服务的方法
  • 您要确保该方法将 firsNamelastName 发送到服务器(例如,它不会同时发送生日和其他细节)

假设讨论中的方法如下所示(为简单起见,我省略了完成处理程序):

- (void)updateFirstName:(NSString*)firstName lastName:(NSString*)lastName {
    // preparation code
    // ...
    [serverApi POST:@"/user" parameters:someParamsYouveBuiltInTheMethod completion:someCompletionHandler];
    // ...
}

那么您可能想要捕获第二个参数并确保它仅包含 firstNamelastName 字段,并且这些字段具有正确的值。

请注意,建议在模拟中使用间谍,从您的示例来看,我认为您的不是。