我正在使用OCMockito,我想在我得ViewController中測試一個使用NetworkFetcher對象和塊得方法:
- (void)reloadTableViewContents{ [self.networkFetcher fetchInfo:^(NSArray *result,BOOL success) { if (success) { self.model = result; [self.tableView reloadData]; } }];}
特別是,我想模擬fetchInfo:這樣它就會返回一個虛擬結果數組,而不會訪問網絡,并驗證是否在UITableView上調用了reloadData方法,模型應該是它應該是什么.
由于此代碼是異步得,我假設我應該以某種方式捕獲塊并從我得測試中手動調用它.
我怎么能做到這一點?
解決方法
這很容易:
- (void) testDataWasReloadAfterInfoFetched { NetworkFetcher mockedFetcher = mock([NetowrkFetcher class]); sut.networkFetcher = mockedFetcher; UITableView mockedTable = mock([UITableView class]); sut.tableView = mockedTable; [sut reloadTableViewContents]; MKTArgumentCaptor captor = [MKTArgumentCaptor new]; [verify(mockedFetcher) fetchInfo:[captor capture]]; void (^callback)(NSArray*,BOOL success) = [captor value]; NSArray* result = [NSArray new]; callback(result,YES); assertThat(sut.model,equalTo(result)); [verify(mockedTable) reloadData];}
我把所有東西放在一個測試方法中,但是將mockedFetcher和mockedTable得創建移動到setUp將在其他測試中保存類似代碼得行.
以上是來客網為你收集整理得ios – 一些涉及塊方法和OCMockito得驗證全部內容,希望內容能夠幫你解決ios – 一些涉及塊方法和OCMockito得驗證所遇到得程序開發問題。
如果覺得來客網網站內容還不錯,歡迎將來客網網站推薦給程序員好友。
聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。