2012-05-28 6 views

risposta

6

Sì. Il modo più semplice sarebbe quella di accettare qualsiasi cosa:

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

Si diventa un po 'più complicato, se si desidera verificare un blocco particolare viene passato Una possibilità è quella di rendere il vostro gestore di completamento di una proprietà della classe, inizializzare quando. si inizializza la classe, e hanno il test match direttamente:

// 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

grazie per il chiarimento – kraag22

+1

Questo farà sì che la stub viene chiamato, ma non sarà effettivamente fare nulla con il blocco passata, giusto? C'è un modo per fare qualcosa con il parametro block, in particolare eseguirlo? Ho uno scenario molto simile, ma voglio che il mio oggetto mock esegua il blocco passato per completare il test. – Mike

+1

Qual è la risposta alla versione 3? – Bernard