對私有方法的訪問同樣有兩種方法:
對于一些不容易構造或不容易獲取的對象,可以創建一個虛擬的對象(mock object)來完成測試。實現思想就是根據要mock的對象的class來創建一個對應的對象,并且設置好該對象的屬性和調用預定方法后的動作(例如返回一個值,執行其他方法,設置參數中的返回值和返回異常等等),然后將其記錄到一個數組中,接下來開發者主動調用該方法,最后做一個verify(驗證),從而判斷該方法是否被調用,或者調用過程中是否拋出異常等。
在iOS手機管家的邏輯接口測試中選用通用的開源OCMock,配置和OCMock的使用參看如下連接文檔:http://ocmock.org/
a、mock返回一個值;
舉例:在iOS手機管家的加密相冊功能中,手機硬件是否支持3Dtouch會影響其登錄流程。如下使用了OCMock來mock isTouchIDSupported 接口,使得其返回設定值YES。
Ps:如下中,通過調用stopMocking可以返回真實的狀態,如果在測試結束前需要保存一個實際情況的數據這個方法是比較合適使用的。StopMocking后mock的方法就不能再繼續使用了。
b、mock執行其他方法;
舉例:如下的mock對象調用isTouchIDSupported方法時,將會調用checkbox對象的isChecked方法。本例中,在mock之前已經將checkbox的isChecked屬性值設置為YES,所以調用[checkbox isChecked]返回的值是YES。注:mock執行其他方法需要保證返回值與mock對象調用方法的返回值類型一致。
原文轉自:http://tmq.qq.com/2017/07/ios/