6

伙计们,我多年来一直在努力寻找一些关于如何使用 Kiwi 测试异步测试委托方法的好例子。

我有一个管理器类,它定义了测试协议,在委托中返回了一个通过和失败的方法。谁能提供有关如何执行此操作的示例代码?我可以让测试类本身实现调用管理器上的方法吗?

多谢你们

4

2 回答 2

6

你可以像例子中那样做

 SPEC_BEGIN(IFStackOverflowRequestSpec)

describe(@"IFStackOverflowRequestSpec", ^
{
    context(@"question request", ^
    {
        __block IFViewController *controller = nil;

         beforeEach(^
         {
             controller = [IFViewController mock];
         });

        it(@"should conform StackOverflowRequestDelegate protocol", ^
        {
             [[controller should] conformToProtocol:@protocol(StackOverflowRequestDelegate)];
        });

         it(@"should recieve receivedJSON", ^
         {
             NSString *questionsUrlString = @"http://api.stackoverflow.com/1.1/search?tagged=iphone&pagesize=20";

             IFStackOverflowRequest *request = [[IFStackOverflowRequest alloc] initWithDelegate:controller urlString:questionsUrlString];
             [[request fetchQestions] start];
             [[[controller shouldEventuallyBeforeTimingOutAfter(3)] receive] receivedJSON:any()];
         });

         it(@"should recieve fetchFailedWithError", ^
         {
             NSString *fakeUrl = @"asda";
             IFStackOverflowRequest *request = [[IFStackOverflowRequest alloc] initWithDelegate:controller urlString:fakeUrl];
             [[request fetchQestions] start];
             [[[controller shouldEventuallyBeforeTimingOutAfter(1)] receive] fetchFailedWithError:any()];
         });
    });
});

完整的例子可以建立在这个链接上。

于 2013-01-15T09:02:33.347 回答
4

您可以通过创建一个代表委托的模拟对象来完成我认为您想要实现的目标,然后检查模拟对象是否接收到您期望的委托回调。所以这个过程看起来像:

  • 创建一个符合委托协议的模拟对象:

id delegateMock = [KWMock mockForProtocol:@protocol(YourProtocol)];

  • 将模拟设置为您的经理类的代表:

[manager setDelegate:delegateMock];

  • 创建一个包含将由管理器类返回的数据的对象:

NSString *response = @"foo";

  • 设置最终应该使用方法和响应对象调用模拟的断言(在这种情况下,我期望接收managerRepliedWithResponseand foo

[[[delegateMock shouldEventually] receive] managerRepliedWithResponse:response];

  • 调用被测方法:

[manager performMyMethod];

关键是在调用方法之前设置期望,并使用shouldEventually它延迟检查断言并给manager对象时间来执行方法。

您还可以使用 Kiwi wiki 上列出的一系列期望 - https://github.com/allending/Kiwi/wiki/Expectations

我已经在我网站上的帖子中更详细地编写了该过程,尽管它更具体地适应了我正在处理的情况。

于 2012-12-05T06:08:49.870 回答