2009-10-31 3 views
2

J'utilise OCMock essayer de tester le comportement de NSURLConnection Voici le test incomplet.En utilisant OCMock pour attendre les méthodes de la catégorie des rendements « [NSProxy doesNotRecognizeSelector » ...] »

#include "GTMSenTestCase.h" 
#import <OCMock/OCMock.h> 

@interface HttpTest : GTMTestCase 

- (void)testShouldConnect; 

@end 

@implementation HttpTest 

- (void)testShouldConnect { 
    id mock = [OCMockObject mockForClass:[NSURLConnection class]]; 

    NSURL *url = [NSURL URLWithString:@"http://www.google.com"]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:mock startImmediately:NO]; 

    [[mock expect] connection:connection didReceiveResponse:OCMOCK_ANY]; 
} 

@end 

Lorsque se moquant d'une classe méthodes de catégorie, que la méthode de connexion de délégué : didReceiveresponse: est, je reçois l'erreur:

Unknown.m:0:0 Unknown.m:0: error: -[HttpTest testShouldConnect] : *** -[NSProxy doesNotRecognizeSelector:connection:didReceiveResponse:] called! 

quelqu'un at-il eu un problème avec cette

Répondre

4

Il semblerait que vous ayez créé un objet fantaisie de NSURLConnection. Toutefois, l'avertissement NSProxy est correct, un objet NSURLConnection n'a pas la connexion de sélecteur: didReceiveResponse: - c'est un sélecteur qui est passé à un objet qui implémente le protocole.

Vous devez simuler un objet qui implémente NSURLConnectionDelegate. Comme le protocole délégué spécifie la connexion: didReceiveResponse: vous ne devriez pas avoir une erreur :)

Je n'ai pas eu beaucoup d'expérience avec OCMock mais cela semble supprimer l'erreur de compilation:

@interface ConnectionDelegate : NSObject { } 
- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response; 
@end 

@implementation ConnectionDelegate 
- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { } 
@end 



@interface ConnectionTestCase : SenTestCase { } 
@end 

@implementation ConnectionTestCase 

- (void)testShouldConnect { 
id mock = [OCMockObject mockForClass:[ConnectionDelegate class]]; 

NSURL *url = [NSURL URLWithString:@"http://www.google.com"]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:mock startImmediately:NO]; 

[[mock expect] connection:connection didReceiveResponse:OCMOCK_ANY]; 
} 

@end 

Hope this helps,

Sam

0

je suis tombé sur cette erreur quand une bibliothèque de projet a été compilé avec GCC l'option COPY_PHASE_STRIP ensemble à YES de sorte que les symboles ne sont pas visibles. Les tests ont ensuite été exécutés contre cette bibliothèque et n'ont pas pu voir les méthodes qui devaient être écrasées. COPY_PHASE_STRIP=NO a corrigé le problème