ios – 一些涉及块方法和OCMockito的验证

前端之家收集整理的这篇文章主要介绍了ios – 一些涉及块方法和OCMockito的验证前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用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将在其他测试中保存类似代码的行.

原文链接:https://www.f2er.com/iOS/328223.html

猜你在找的iOS相关文章