2011-10-21 58 views
2

我有一個應用程序,爲此我使用Objective Resource創建本地對象以反映遠程響應。iOS測試使用Kiwi屬性的模擬子類

特定模型類具有abstract-ish類的子類,以爲它們提供各種附加功能,最重要的是能夠序列化,寫入磁盤和從磁盤加載,而不管具體屬性是什麼那個特定的模型對象。

superclass.m 

-(BOOL)saveToDisk{ 
    ...serializes and encodes all properties to disk 
    ...return success 
} 


subclass.h : superclass 

@property (nonatomic, retain) NSString* name; 
@property (nonatomic, retain) NSArray* friends; 
...etc 

然後我會打電話

 instanceOfSubclass.name = "joe" 
    NSLog(@"save status = %d",[instanceOfSubclass saveToDisk]); 

我是新來的BDD和測試驅動開發一般。我如何創建一個使用kiwi的模擬對象來抽象地測試這個功能,因爲我在很多項目中使用這個框架。

具體來說,我想要構建測試,以確保可以保存具有各種類型屬性的子類,並將其加載,刪除和覆蓋。

我的理解是,這是存根和模擬的地方,但我似乎無法弄清楚如何模擬屬性。我必須創建一個具有這些屬性的實際類嗎?

回答

0

this location有一些文件給你。基本上,Kiwi提供了NSObject上的Objective-C類別,您可以在#import "Kiwi.h"時訪問該目錄。這允許從NSObject繼承的所有對象響應+mock,mockWithName:等,這可通過KWMock類進行配置。

希望這有助於和對不起它有點晚了:)

+0

文檔鏈接已損壞,請嘗試github:https://github.com/kiwi-bdd/Kiwi/wiki/Mocks-and-Stubs – manroe

1

屬性是幕後的方法,所以:

我設法通過@aopsfan提到與+mock相結合的方法來做到這一點,然後使用-stub:andReturn:我猜對了實現這些屬性的方法的名稱。這個例子的工作,冒充TCConnection(從Twilio iOS SDK):

// Instantiates a mocked object: 
id fake_connection = [TCConnection mock]; 
// Creates a faked property accessor: 
[fake_connection stub:@selector(parameters) 
      andReturn:@{@"From": @"fake-caller"}]; 

// I could now call my TCDeviceDelegate 's 
// -device:didReceiveIncomingConnection: 
[myActualObject device:myActualObject.device 
      didReceiveIncomingConnection:fake_connection]; 
// Check some results on the object: 
[[myActualObject.connection should] equal:fake_connection]; 

這種模式具體的例子可以推廣到其他情形。調用-stub(不包括andReturn:)參數可以消除無法在模擬燈具中調用的方法。