检查参数值传递给函数在单元测试
问题描述:
我使用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? (有它的文档怎么做,在没有明显的例子。)
答
你可以把它像
-(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);
}
希望这有助于
谢谢,我d希望看到任何其他答案都可以提供一个解决方案,以便用OCMock 3随时捕捉参数。如果不可能,我会接受这个答案。 –
谢谢,但如果你看OCMock 3文档我提供的答案匹配此文档和语法。 – iSashok
这是正确的答案。如果你真的想捕捉参数来做断言,那么你必须使用'andDo'来使用块。在这种情况下,您必须格外小心,确定变量的范围,并保留从调用中提取的参数。之前的问题已经被问及(并回答了!)。 –