5
有沒有一種方法來存根方法,它將塊作爲參數?例如mehod:帶有代碼塊作爲參數的存根方法使用OCMock
- (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;
有沒有一種方法來存根方法,它將塊作爲參數?例如mehod:帶有代碼塊作爲參數的存根方法使用OCMock
- (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;
是的。最簡單的辦法是接受什麼:
id mockGeocoder = [OCMockObject mockForClass:[CLGeocoder class]];
[[mockGeocoder stub] reverseGeocodeLocation:[OCMOCK_ANY] completionHandler:[OCMOCK_ANY]];
它變得有點棘手,如果你想驗證一個特定塊在傳遞一種選擇是讓你完成處理程序類的屬性,當初始化。初始化類,並直接有測試賽吧:
// in your class
@property(copy)CLGeocodeCompletionHandler completionHandler;
// in your class's init method
self.completionHandler = ^(NSArray *placemark, NSError *error) {
//
}
// using the completion handler
[geocoder reverseGeocodeLocation:location completionHandler:self.completionHandler];
// the test
id mockGeocoder = [OCMockObject mockForClass:[CLGeocoder class]];
[[mockGeocoder stub] reverseGeocodeLocation:[OCMOCK_ANY] completionHandler:yourClass.completionHandler];
感謝澄清 – kraag22
這將確保存根方法被調用,但實際上並不會做與塊任何傳入,是否正確?有什麼方法可以對block參數做任何事情,特別是運行它嗎?我有一個非常相似的場景,但我希望我的模擬對象運行傳入的塊來完成測試。 – Mike
什麼是版本3的答案? – Bernard