2013-09-01 72 views
0

我是新来测试驱动的开发,并有一个基本的问题。如何访问单元测试的私有属性?关于如何访问方法,有很多答案,但我无法在属性上找到很多答案。这是我现在为我的课堂CDTest所得到的。为了便于阅读,排除一些导入的标题。OCUnit私有属性

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 

单元测试.m文件

#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

想要一个测试访问私有财产是一个代码味道。尝试完全通过您的公共API进行测试。如果你说,“但我真的需要这个,”听你的测试:另一个班正试图脱身。请参阅http://qualitycoding.org/testability-vs-hiding/ –

回答

1

在Objective-C属性中是方法(每个属性是一个getter和一个setter,如果它是可读/写的)。

刚刚宣布在保护类别你的财产,应声明是这样的

@interface CDTest(Protected) 

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

@end 
+0

Duh!不能相信我错过了这一点。谢谢。 – BlueVoodoo