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

ios – 一些涉及块方法和OCMockito的验证,第1张

概述我正在使用OCMockito,我想在我的ViewController中测试一个使用NetworkFetcher对象和块的方法: - (void)reloadTableViewContents{ [self.networkFetcher fetchInfo:^(NSArray *result, BOOL success) { if (success) { 我正在使用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的验证所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1114044.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存