0

I'm having trouble understanding what a practical application of using Kiwi's KWCaptureSpy is. I could do something like this and have it pass:

 __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"];

but that doesn't seem to actually be testing anything. The example in Kiwi's documentation doesn't help: https://github.com/kiwi-bdd/Kiwi/wiki/Mocks-and-Stubs#capturing-arguments

Has anyone had a good reason to use KWCaptureSpy in practice?

4

1 回答 1

0

这是一个可能的情况:

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

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

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

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

作为说明,建议在模拟中使用间谍,从您的示例中我认为您的示例不是。

于 2015-05-07T19:35:56.383 回答