2013-07-10 92 views
4

模擬對象,我需要用以下幫助:考察一個方法參數:我​​在寫一些BDD測試一個客戶端API結構如下:獼猴桃

@protocol MyAPIClientDelegate <NSObject> 
    -(void)myCallbackMethod:(id)response; 
@end 

// BEGIN: MyAPIClientSpec.h 

SPEC_BEGIN(MyAPIClientSpec) 

describe(@"MyAPIClientAPI ", ^{ 
    __block MyAPI *api = nil; 
    __block id delegateMock = nil; 

    beforeEach(^{ 
     delegateMock = [KWMock mockForProtocol:@protocol(MyAPIClientDelegate)]; 
     api = [MyAPI APIClientWithDelegate:delegateMock]; 
    }); 

    afterEach(^{ 
     delegateMock = nil; 
     api = nil; 
    }); 

    it(@"should return a JSON { result: 'ok', token: <SOME_TOKEN> }", ^{ 
     [[api should] receive:@selector(myMethodCall:)]; 

     [[[delegateMock shouldEventually] receive] myCallbackMethod:any()]; 

     [api myMethodCall]; 
    }); 
}); 

SPEC_END 

正如你可以在代碼中看到上面,我使用any()來檢查至少有一個參數發送給委託。

有無論如何定義一個函數(或objective-c塊)來檢查參數嗎?

謝謝!

+0

現在懲戒新西蘭人?開始國際事件?休閒種族主義? –

回答

2

嘗試使用capture spy

it(@"should return a JSON { result: 'ok', token: <SOME_TOKEN> }", ^{ 
    [[api should] receive:@selector(myMethodCall:)]; 

    KWCaptureSpy *spy = [delegateMock captureArgument:@selector(myCallbackMethod:) atIndex:0]; 

    [api myMethodCall]; 

    [[spy.argument should] equal:/* ... */]; 
}); 
+0

嗯,它應該工作,但似乎運行測試時出現問題。 – dornad

+0

我會將此標記爲答案,並在我有更多關於發生的事情的更多細節的地方打開另一個問題。 – dornad

相關問題