我正在使用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的验证的更多相关文章

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

    我正在使用Ocmockito,我想在我的ViewController中测试一个使用NetworkFetcher对象和块的方法:特别是,我想模拟fetchInfo:这样它就会返回一个虚拟结果数组,而不会访问网络,并验证是否在UITableView上调用了reloadData方法,模型应该是它应该是什么.由于此代码是异步的,我假设我应该以某种方式捕获块并从我的测试中手动调用它.我怎么能做到这一点?解决方法这很容易:我把所有东西放在一个测试方法中,但是将mockedFetcher和mockedTable的创建移

  2. Android架构组件ViewModel – 如何在测试Activity上模拟ViewModel?

    我正在尝试设置类似于GithubbrowserSample的UI测试,看起来示例项目只有Frag的模拟viewmodel而不是Activity的示例.这是我的代码,我试图通过模拟viewmodel来测试Activity.但viewmodel未在Activity中的onCreate()之前设置.有人可以帮我解决这个问题吗?解决方法JUnit@Rules在@Before方法之前进行设置,因此您的活动在

  3. 单元测试 – 当Power Mock在多个文件上运行Robolectric测试时,ClassCastException异常

    所以我设置了基于参考指南here的权力模拟.它似乎运行完美的一个单一的测试类.但是当执行多个JUnit测试时,我在第二个测试类上收到以下错误.从下面的stacktrace可以看出,我试图模拟一个ottoBus实例.似乎在第一个测试类上正确地模拟,但是在第二个类中,我得到这个类转换异常.在堆栈跟踪我建议禁用Objenisis缓存,但我不知道如何完成,如果这是根本原因,因为我正在使用classload

  4. php – 在同一个类中测试一个方法

    我想在同一个类中模拟我正在测试的方法.我在想,我可以用反射来做到这一点,但也许这只是一个标志,我应该将hardToTest移动到另一个对象中.如果undertest()将“foo”传递给hardTotest(),则此测试将成功.这在PHPUnit的文档中被称为部分模拟,因为你只是嘲笑一些方法.我同意你的直觉,这种需求可能是一个代码气味,告诉你这个班太多了.PHPUnit5.4由于getMock()在5.4中已被弃用,请改用getMockBuilder():

  5. angularjs – 在测试angular指令时,isolateScope()返回undefined

    使用Angularv1.2.25和rails资产管道,我试图测试指令的隔离范围确实已经更新.由于isolateScope()返回undefined我得到预期未定义的定义…

  6. angularjs – angular mock“module”导致'[Object object]不是函数’

    我正在尝试使用通过Teaspoon运行的Jasmine在Angular中创建一些单元测试。测试正在运行,但是我有一个简单的测试只是为了测试失败的控制器的存在。我有以下测试设置。请求语句由browserify处理,它处理我的依赖项,但我也可以挂钩到我用于规范帮助程序的sprockets。在我需要的应用程序内部当我运行此测试时,我得到以下错误我花了很长时间试图解决这个问题,但我不知道发生了什么。我有同样的问题。

  7. 单元测试 – 如何使用mock $httpBackend来测试错误分支

    我想做的是设置触发$scope.status=’ERROR!’的前提条件码。这是一个最小的例子。在设置范围的属性时,您将检查控制器的属性。如果你想在你的expect函数中测试controller.status,你应该在你的控制器里面设置this.status,而不是$scope.status。另一方面,如果在控制器中设置$scope.status,那么您应该在期望的调用中使用scope.status而不是controller.status。p=preview所有测试现在都过去了

  8. angularjs – E2E mock $httpBackend实际上并没有透过我

    虽然我相信我正在跟随instructionshere设置$httpBackend将选定的请求传递给服务器,但这对我来说并不适用。我的推理表明,由于某种原因,模拟$httpBackend没有真正的$httpBackend的内部副本,所以当它通过XHR请求的时候,它将它传递给mock$httpBackend。对dtabuenc的回应我记得欣赏你在中期测试的职位。我根本不觉得你很猥琐你的答案是完美的合理的,或者如果它与“APIreference/ngMockE2E/$httpBackend”的文本没有矛盾是合理

  9. c# – 如何在我的单元测试中使用Mock Objects,仍然使用Code Coverage?

    目前,我开始将Mock对象的概念引入到我的单元测试中.特别是我正在使用Moq框架.然而,我注意到的一件事是突然间,我使用这个框架测试的类显示的代码覆盖率为0%.现在我明白,因为我只是嘲笑课堂,它不运行实际的类本身…我必须编写一套使用Mocks和一组才能直接实例化的测试.也许我没有意识到做错事了吗?

  10. javascript – Jasmine mock ajax调用不在IE中工作

    我尝试编写一个允许Ajax调用被嘲笑的规范.测试用例在Chrome和Firefox等浏览器上运行得非常好.但是当我在IE上运行测试用例时,我遇到了一些问题.当使用jQueryAjax进行正常的Ajax调用时会出现此问题.我在IE中收到错误如下:我写的测试用例如下有关此问题的任何帮助表示赞赏.提前致谢!解决方法你在用jasmine-ajax吗?在githubrepo上出现了一个问题似乎已经被最近的拉取请求修复了.IEIssuejasmine-ajax

随机推荐

  1. iOS实现拖拽View跟随手指浮动效果

    这篇文章主要为大家详细介绍了iOS实现拖拽View跟随手指浮动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. iOS – genstrings:无法连接到输出目录en.lproj

    使用我桌面上的项目文件夹,我启动终端输入:cd然后将我的项目文件夹拖到终端,它给了我路径.然后我将这行代码粘贴到终端中找.-name*.m|xargsgenstrings-oen.lproj我在终端中收到此错误消息:genstrings:无法连接到输出目录en.lproj它多次打印这行,然后说我的项目是一个目录的路径?没有.strings文件.对我做错了什么的想法?

  3. iOS 7 UIButtonBarItem图像没有色调

    如何确保按钮图标采用全局色调?解决方法只是想将其转换为根注释,以便为“回答”复选标记提供更好的上下文,并提供更好的格式.我能想出这个!

  4. ios – 在自定义相机层的AVFoundation中自动对焦和自动曝光

    为AVFoundation定制图层相机创建精确的自动对焦和曝光的最佳方法是什么?

  5. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  6. ios – 在没有iPhone6s或更新的情况下测试ARKit

    我在决定下载Xcode9之前.我想玩新的框架–ARKit.我知道要用ARKit运行app我需要一个带有A9芯片或更新版本的设备.不幸的是我有一个较旧的.我的问题是已经下载了新Xcode的人.在我的情况下有可能运行ARKit应用程序吗?那个或其他任何模拟器?任何想法或我将不得不购买新设备?解决方法任何iOS11设备都可以使用ARKit,但是具有高质量AR体验的全球跟踪功能需要使用A9或更高版本处理器的设备.使用iOS11测试版更新您的设备是必要的.

  7. 将iOS应用移植到Android

    我们制作了一个具有2000个目标c类的退出大型iOS应用程序.我想知道有一个最佳实践指南将其移植到Android?此外,由于我们的应用程序大量使用UINavigation和UIView控制器,我想知道在Android上有类似的模型和实现.谢谢到目前为止,guenter解决方法老实说,我认为你正在计划的只是制作难以维护的糟糕代码.我意识到这听起来像很多工作,但从长远来看它会更容易,我只是将应用程序的概念“移植”到android并从头开始编写.

  8. ios – 在Swift中覆盖Objective C类方法

    我是Swift的初学者,我正在尝试在Swift项目中使用JSONModel.我想从JSONModel覆盖方法keyMapper,但我没有找到如何覆盖模型类中的Objective-C类方法.该方法的签名是:我怎样才能做到这一点?解决方法您可以像覆盖实例方法一样执行此操作,但使用class关键字除外:

  9. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  10. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

返回
顶部