2016-06-08 78 views
1

我使用OCMock v3做单元测试,我想测试下面的一段代码:检查参数值传递给函数在单元测试

@implementation School 
-(void) handleStudent:(Student*) student{ 
Bool result = [self checkIdentityWithName:student.name age:student.age]; 
... 
} 
... 
@end 

在我下面的测试情况下,我创建了一个student实例名称为“约翰”,23岁,然后我在试运行功能:

-(void) testHandleStudent{ 
    Student *student = [Student initWithName:@"John" age:23]; 
    // function under test 
    [schoolPartialMock handleStudent:student]; 

    // I want to not only verify checkIdentityWithName:age: get called, 
    // but also check the exact argument is passed in. that's John 23 in this case 
    // how to check argument ? 

} 

在我的测试情况下,我想验证确切的参数值传递到功能checkIdentityWithName:age:。这就是名字“约翰”,并使用了23岁。如何验证在OCMock v3? (有它的文档怎么做,在没有明显的例子。)

回答

0

你可以把它像

-(void) testHandleStudent{ 
    id studentMock = OCMClassMock([Student class]); 
    OCMStub([studentMock name]).andReturn(@"John"); 
    OCMStub([studentMock age]).andReturn(23); 

    [schoolPartialMock handleStudent:studentMock]; 
    OCMVerify([schoolPartialMock checkIdentityWithName:@"John" age:23]); 
} 

-(void) testHandleStudent{ 
     id studentMock = OCMClassMock([Student class]); 
     OCMStub([studentMock name]).andReturn(@"John"); 
     OCMStub([studentMock age]).andReturn(23); 

     OCMExpect([schoolPartialMock checkIdentityWithName:@"John" age:23]); 

     [schoolPartialMock handleStudent:studentMock]; 

     OCMVerifyAll(schoolPartialMock); 
    } 

希望这有助于

+0

谢谢,我d希望看到任何其他答案都可以提供一个解决方案,以便用OCMock 3随时捕捉参数。如果不可能,我会接受这个答案。 –

+0

谢谢,但如果你看OCMock 3文档我提供的答案匹配此文档和语法。 – iSashok

+0

这是正确的答案。如果你真的想捕捉参数来做断言,那么你必须使用'andDo'来使用块。在这种情况下,您必须格外小心,确定变量的范围,并保留从调用中提取的参数。之前的问题已经被问及(并回答了!)。 –