2009-12-31 4 views
1

Je souhaite tester la méthode init personnalisée d'une classe héritée de NSURLConnection - comment procéder si l'init de ma classe testable appelle NSURLConnection's initWithRequest? J'utilise OCMock et normalement, je peux simuler des objets contenus dans ma classe de test. Pour ce scénario d'héritage, quelle est la meilleure approche pour le faire?iphone OCMockObject et test unitaire d'une classe héritée de NSURLConnection

- (void)testInit 
{ 
    id urlRequest = [OCMockObject mockForClass:[NSURLRequest class]]; 

    MyURLConnectionWrapper *conn = [[MyURLConnectionWrapper alloc] 
        initWithRequest:urlRequest delegate:self 
        someData:extraneousData]; 
} 

Ma classe est mis en œuvre comme ceci:

@interface MyURLConnectionWrapper : NSURLConnection { 

} 
- (id)initWithRequest:(NSURLRequest *)request 
      delegate:(id)delegate someData:(NSString *)fooData 
@end 

@implementation MyURLConnectionWrapper 

- (id)initWithRequest:(NSURLRequest *)request 
      delegate:(id)delegate someData:(NSString *)fooData 
{ 
    if (self = [super initWithRequest:request delegate:delegate]) 
    { 
     // do some additional work here 
    } 

    return self; 
} 

Voici l'erreur que je reçois:

OCMockObject [NSURLRequest]: méthode inattendue invoquée: _CFURLRequest

Répondre

0

Votre wrapper appelle la vraie chose: [super i nitWithRequest ...], et NSURLRequest appelle une méthode _CFURLRequest pour laquelle vous n'avez pas défini d'attente. Puisque vous faites un wrapper, vous êtes "stub" bing le NSURLConnection pas "moqué" il. Et vous ne voulez probablement pas engager l'objet réel. Vous pourriez faire en sorte que votre encapsuleur mette en œuvre toutes les méthodes que votre unité en test appellera et fera s'affirmer en son sein. Puisque vous ne faites pas un objet OCMockObject hors de la connexion NSURLConnection, vous ne pouvez pas utiliser les méthodes verify.

Je suis encore nouveau à moquer en Objective-C donc je n'ai pas encore une approche pour se moquer de la NSURLConnection.

1

Si vous changez mockForClass-niceMockForClass, vous obtiendrez un objet stub qui silencieusement ignorer les messages que vous ne se soucient pas, mais vous pouvez toujours définir les attentes pour les appels se soucient:

id urlRequest = [OCMockObject niceMockForClass:[NSURLRequest class]]; 
Questions connexes