2014-03-19 27 views
1

我使用MVVM與ReactiveCocoa和OCMockito進行測試。假設我有一個ViewController A和ViewController B.需要對B執行一個segue。我想驗證當發生這種情況時,A首先通過賦值將必要的數據('model')傳遞給B。如何使用OCMockito驗證只讀屬性的行爲?

B看起來是這樣的:

@interface ViewControllerB : UITableViewController 
@property(nonatomic, readonly) ViewModel *viewModel; 
@end 

某處在視圖控制器A,有一種說法:

viewControllerB.viewModel.model = newModel; // passes new data along for B to display 

我想要驗證這個任務正在發生,但viewModel屬性是隻讀的。 viewModel由viewController的init方法初始化。

我怎麼可以在這裏嘲笑viewModel?

我可以部分模擬viewControllerB返回一個模擬viewModel,然後我驗證但https://github.com/jonreid/OCMockito/issues/38說部分模擬已被刪除。爲什麼?!

回答

0

我會修改init以接受'ViewModel'並將其分配給只讀屬性。在此之後,您可以模擬模型並驗證setter調用。

我不是很喜歡修改API只是爲了能夠測試類,但可能這種改變對你的設計來說很自然。

我還注意到了 - 雙點使用。對我來說,這是非常明顯的跡象,關於API

+0

中的必要更改是的好點 - 我在一分鐘內使用故事板,所以我讓iOS處理我的視圖控制器實例。這是它如此痛苦的部分原因:我無法定義一個單獨的'init',我希望傳入的數據被傳入。 – fatuhoku