Zay*_*ige 3 objective-c ocmock
在我的夹具setUp我有以下
-(void)setUp{
_vc = [OCMockObject partialMockForObject:[[InboxViewController alloc] init]];
//stub out the view stuff
[[_vc stub] removeTask:OCMOCK_ANY];
[[_vc stub] insertTask:OCMOCK_ANY];
}
Run Code Online (Sandbox Code Playgroud)
夹具中有15个测试,但是,我需要实际测试这两个方法是否被调用,所以我写了2个测试
-(void)someTest{
[[_vc expect] removeTask:OCMOCK_ANY];
[_vc removeAllTasksFromList:taskList notInList:newTaskList];
[_vc verify];
}
Run Code Online (Sandbox Code Playgroud)
但那次测试失败了
我也试过了
-(void)someTest{
[[_vc stopMocking];
[[_vc expect] removeTask:OCMOCK_ANY];
[[_vc stub] removeTask:OCMOCK_ANY];
[_vc removeAllTasksFromList:taskList notInList:newTaskList];
[_vc verify];
}
Run Code Online (Sandbox Code Playgroud)
但测试仍然失败.我错过了什么,或者这就是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];
}
Run Code Online (Sandbox Code Playgroud)
也许文档应该更清晰.什么stopMocking确实对部分模拟是为了还原真实的对象,你的情况InboxViewController,到原来的状态.调用stopMocking不会重置模拟对象,这意味着它不会清除存根和期望.您始终可以调用stopMocking,然后为同一个真实对象创建一个新的模拟.
正如在另一个答案中指出的那样,通常可以更好地避免使用存根和期望相同的方法,但是如果必须这样做,请确保在存根之前设置期望值; 否则存根将处理调用,期望永远不会看到它们.
我知道传统上很多人建议使用设置方法来设置测试主题.多年来,我个人的经验是,它通常不值得.在每个测试中保存几行可能看起来很有吸引力,但最终它确实在各个测试之间创建了耦合,使得套件更加脆弱.
| 归档时间: |
|
| 查看次数: |
5287 次 |
| 最近记录: |