2013-09-01 101 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