加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – OcMock – Stub / expect / stopmocking

发布时间:2020-12-16 10:33:33 所属栏目:百科 来源:网络整理
导读:在我的夹具setUp我有以下 -(void)setUp{ _vc = [OCMockObject partialMockForObject:[[InboxViewController alloc] init]]; //stub out the view stuff [[_vc stub] removeTask:OCMOCK_ANY]; [[_vc stub] insertTask:OCMOCK_ANY];} 夹具中有15个测试,但是,我
在我的夹具setUp我有以下

-(void)setUp{
    _vc = [OCMockObject partialMockForObject:[[InboxViewController alloc] init]];
    //stub out the view stuff
    [[_vc stub] removeTask:OCMOCK_ANY];
    [[_vc stub] insertTask:OCMOCK_ANY];
}

夹具中有15个测试,但是,我需要实际测试这两个方法是否被调用,所以我写了2个测试

-(void)someTest{
    [[_vc expect] removeTask:OCMOCK_ANY];
    [_vc removeAllTasksFromList:taskList notInList:newTaskList];
    [_vc verify];
}

但那次测试失败了

我也试过了

-(void)someTest{
    [[_vc stopMocking];
    [[_vc expect] removeTask:OCMOCK_ANY];
    [[_vc stub] removeTask:OCMOCK_ANY];
    [_vc removeAllTasksFromList:taskList notInList:newTaskList];
    [_vc verify];
}

但测试仍然失败.我错过了什么,或者这就是OCMock的工作方式?

我能让它发挥作用的唯一方法就是这样

-(void)someTest{
    //re create and init the mock object 
    _vc = [OCMockObject partialMockForObject:[[InboxViewController alloc] init]]; 
    [[_vc expect] removeTask:OCMOCK_ANY]; 
    [[_vc stub] removeTask:OCMOCK_ANY]; 
    [_vc removeAllTasksFromList:taskList notInList:newTaskList]; 
    [_vc verify]; 
}

解决方法

也许文档应该更清晰. stopMocking对部分模拟的作用是将真实对象(在您的情况下为InboxViewController)恢复到其原始状态.调用stopMocking不会重置模拟对象,这意味着它不会清除存根和期望.您始终可以调用stopMocking,然后为同一个真实对象创建一个新的模拟.

正如在另一个答案中指出的那样,通常可以更好地避免使用存根和期望相同的方法,但是如果必须这样做,请确保在存根之前设置期望值;否则存根将处理调用,期望永远不会看到它们.

我知道传统上很多人建议使用设置方法来设置测试主题.多年来,我个人的经验是,它通常不值得.在每个测试中保存几行可能看起来很有吸引力,但最终它确实在各个测试之间创建了耦合,使得套件更加脆弱.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读