2012-05-28 6 views

Antwort

6

Ja. Der einfachste Weg wäre, etwas zu akzeptieren:

id mockGeocoder = [OCMockObject mockForClass:[CLGeocoder class]]; 
[[mockGeocoder stub] reverseGeocodeLocation:[OCMOCK_ANY] completionHandler:[OCMOCK_ANY]]; 

Es wird ein bisschen schwieriger, wenn Sie einen bestimmten Block überprüfen möchten, wird in weitergegeben Eine Option ist Ihr Abschluss-Handler eine Eigenschaft Ihrer Klasse zu machen, initialisieren es, wenn. Sie initialisieren Ihre Klasse und haben das Testspiel direkt:

// 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]; 
+0

dank für – kraag22

+1

Klärung Dadurch wird sichergestellt, dass die Stub-Methode aufgerufen wird, aber nicht wirklich mit dem Block alles tun, übergeben, richtig? Gibt es eine Möglichkeit, irgendetwas mit dem Block-Parameter zu tun, insbesondere ihn auszuführen? Ich habe ein sehr ähnliches Szenario, aber ich möchte, dass mein Mock-Objekt den übergebenen Block ausführt, um den Test abzuschließen. – Mike

+1

Was ist die Antwort der Version 3? – Bernard