2014-02-22 129 views
2

我正在爲我的班級寫單元測試。它具有在類擴展中聲明的私有屬性。現在,我想在單元測試中提供對這些屬性的訪問權限,因此我必須將實現文件中的類擴展提取到可以在單元測試中導入的單獨頭文件中。類擴展與實現(.m)分離時,適當的文件命名約定是什麼?什麼是Objective-C中類擴展的正確文件命名約定?

// MyClass.h 
@interface MyClass : NSObject 
@end 

// MyClass.m 
@implementation MyClass 
@end 

// MyClass+???.h 
@interface MyClass() 

@property (nonatomic, strong) NSString *myString; 

@end 
+0

你爲什麼會分開實施延期?在頭文件中聲明一些公開的東西是非常常見的,然後在實現文件上方聲明實現文件中所需的所有其他東西。如果你需要一些額外的公共API,你最好使用類別。 – Danchoys

+0

@Danchoys我只想在單元測試中找到這些屬性。因此,如果我宣佈它們是公開的,那麼它會破壞API設計,只是因爲我會從測試中獲得它們。 – vbali

回答

1

目標C沒有標準的代碼約定。蘋果的文檔只描述了幾個簡單的時刻。最常見的方法是使用

MyClass_Private.h 

用於擴展和

MyClass+Private.h 

的類別。

+0

是的,看起來這是「標準」類別的通用慣例,但類擴展又如何? 'MyClass + Private.h'表示這是一個類別。 – vbali

+0

是的,你是對的。對不起,我做了一個印刷錯誤。 – Avt

1

沒有標準。爲該文件命名適當的東西。內容應該是'私人',並且只有在那裏才能進行測試,因此這將是一個合適的(並且相對標準的)名稱。

+0

我同意這一點,但什麼是合適的?我有一種不好的感覺,如果我把它稱爲'MyClass + Testing.h',這會是令人困惑的,因爲這是實現的一個組成部分。 – vbali

+0

我推薦'私人'。我同意'測試'是一個非常糟糕的選擇。 – Wain

1

我通常使用MyClass+CategoryName.h當分機是一個類別,但如果擴展名不是一個類別,然後我把它叫做MyClassExtension.hMyClass_extensionName.h