2013-09-01 4 views
0

Je suis nouveau dans le développement piloté par les tests et j'ai une question fondamentale. Comment accéder aux propriétés privées pour les tests unitaires? Il y a beaucoup de réponses sur la façon dont vous accédez aux méthodes mais je n'ai pas trouvé grand-chose sur les propriétés. Voici ce que j'ai maintenant pour ma classe CDTest. Exclure certains en-têtes importés à des fins de lisibilité.OCUnit sur les propriétés privées

CDTest.h

@interface CDTest : NSObject 

@end 

CDTest.m

#import "CDTest.h" 
#import "CDTest+Protected.h" 

@interface CDTest() 

@property (strong, nonatomic) NSManagedObjectContext *context; 

@end 

@implementation CDTest 

- (void)setup 
{ 
    //Sets up the context 
} 

@end 

cdtest + Protected.h

@interface CDTest() 

- (void)setup; 

@end 

fichier .m test unitaire

#import "CDTest.h" 
#import "CDTest+Protected.h" 

@implementation CDTestTests 
{ 
    CDTest *cdTest; 
} 

- (void)setUp 
{ 
    [super setUp]; 
    cdTest = [CDTest new]; 
} 

- (void)testSetup 
{ 
    [cdTest setup]; 
    //Now I need access to the properties in cdTest to validate them 
} 

@end 
+0

Voulant un test pour accéder à une propriété privée est une odeur de code. Essayez de tester entièrement via votre API publique. Si vous dites: «Mais j'ai vraiment besoin de ça», écoutez votre test: une autre classe essaie de s'en sortir. Voir http://qualitycoding.org/testability-vs-hiding/ –

Répondre

1

Dans Objective-C, les propriétés sont des méthodes (chaque propriété est un getter et un setter s'il est en lecture/écriture).

simplement déclarer votre propriété dans la catégorie protégée, ce qui devrait être déclaré quelque chose comme ça

@interface CDTest(Protected) 

- (void)setup; 
@property (strong, nonatomic) NSManagedObjectContext *context; 

@end 
+0

Duh! Je ne peux pas croire que j'ai raté ça. Merci. – BlueVoodoo

Questions connexes