2015-03-25 49 views
3

我想測試我的init*方法是否使用OCMockito在其主體內調用其他方法。這是可能的,如果,我該怎麼做?比方說,我想檢查是否已調用[self myMethod]使用OCMockito在init *中驗證方法調用

我一直在試圖做一個這樣的天真的方式,但你可以想像,沒有成功:

it(@"should trigger myMethod", ^{ 
    DetailsView *mockDetailsView = mock([DetailsView class]); 
    [mockDetailsView initWithFrame:CGRectZero]; 
    [verify(mockDetailsView) myMethod]; 
}); 

回答

7

有根據的myMethod功能三種可能性。

移動從init

myMethod叫出如果myMethod意識到它可能應該由對象的所有者顯式調用該對象的非常具體的邏輯。對象創建不應該只是設置其初始狀態。然後,如果它不在init中,則很容易測試。

檢查對象的狀態

如果「myMethod`以某種方式配置的對象,你可以測試它的性能還是它的狀態,而不是檢查方法被調用,因爲它是二次 - 最後的結果是很重要的。

測試方法...

最後,如果你真的需要測試myMethod是否被調用,並沒有上述應用(這不應該發生),你可以在方法體中設置一物業self.myMethodCalled = YES。 這是非常醜陋的,所以你可以從你的類派生,重寫myMethod並在那裏設置屬性,然後驗證這個調用是否測試了子類(這是不安全和不純的)。

這真的很黑,並且表明從對象設計的角度來看可能是錯誤的。

+0

很好的回答!沒什麼可添加的 – 2015-03-27 10:38:44

相關問題