2015-08-03 53 views
2

我在我的應用程序中有以下方法,我需要編寫單元測試用例。
任何人都可以建議如何測試是否調用成功塊或錯誤塊。回調方法的單元測試用例ios

- (IBAction)loginButtonTapped:(id)sender 
{ 
    void (^SuccessBlock)(id, NSDictionary*) = ^(id response, NSDictionary* headers) { 
     [self someMethod]; 
    }; 

    void (^ErrorBlock)(id, NSDictionary*, id) = ^(NSError* error, NSDictionary* headers, id response) { 
     // some code 
    }; 

    [ServiceClass deleteWebService:@「http://someurl" 
           data:nil 
        withSuccessBlock:SuccessBlock 
        withErrorBlock:ErrorBlock]; 
} 

回答

1

你必須使用期望值,一個相對最近推出的API。添加它們是爲了準確解決您現在遇到的問題,並驗證異步方法的回調被調用。

請注意,您也可以設置一個會影響測試結果的超時(例如,慢速網絡連接可能引發誤報,除非您正在檢查慢速連接,儘管有更好的方法可以做到這一點)。

- (void)testThatCallbackIsCalled { 

    // Given 
    XCTestExpectation *expectation = [self expectationWithDescription:@"Expecting Callback"]; 

    // When 
    void (^SuccessBlock)(id, NSDictionary*) = ^(id response, NSDictionary* headers) { 

     // Then 
     [self someMethod]; 
     [expectation fulfill]; // This tells the test that your expectation was fulfilled i.e. the callback was called. 
    }; 

    void (^ErrorBlock)(id, NSDictionary*, id) = ^(NSError* error, NSDictionary* headers, id response) { 

    // some code 

    }; 

    [ServiceClass deleteWebService:@「http://someurl" 

              data:nil 

           withSuccessBlock:SuccessBlock 

           withErrorBlock:ErrorBlock]; 
    }; 

    // Here we set the timeout, play around to find what works best for your case to avoid false positives. 
    [self waitForExpectationsWithTimeout:2.0 handler:nil]; 

} 
+0

但是這將是「deleteWebService」方法的單元測試。我正在尋找一種方法來測試「loginButtonTapped」方法,並檢查是否調用了成功和錯誤塊。 – Shubham

+1

然後使用模擬框架(例如OCMock,OCMockito),並驗證在觸發「loginButtonTapped」操作時調用「deleteWebService」。如果你還有回調的「期望」單元測試,那麼你被覆蓋了,不是嗎? – joakim