Pra*_*iga 14 iphone ocmock ios
我刚刚练习OCMock,我面临的问题是
我有一个名为fooreturn的CGRect方法,此方法是从另一个方法调用的callFoo.
-(CGRect)foo {
return CGRectMake(10, 10, 10, 10);
}
-(void)callFoo {
CGRect rect = [self foo];
NSLog(@"%@",NSStringFromCGRect(rect));
}
Run Code Online (Sandbox Code Playgroud)
我对callFoo方法的单元测试如下.
- (void)test__callFoo__invokesWithMockingFoo
{
ViewController *sut = [[ViewController alloc] init];
id master = [OCMockObject partialMockForObject:sut];
CGRect rect = CGRectMake(0, 0, 0, 0);
[[[master expect] andReturnValue:OCMOCK_VALUE(rect)] foo];
[sut callFoo];
[master verify];
}
Run Code Online (Sandbox Code Playgroud)
当此测试用例运行,我当它到达得到了意想不到的崩溃CGRect rect = [self foo];
,我想知道为什么这种崩溃是如果我们回到发生CGRect的mocked method,以及如何解决这个崩溃.
任何人都可以帮助解决这个问题.
提前致谢.
PS:如果我用NSValue替换CGRect,这可以正常工作. As shown below
-(NSValue *)foo {
return [NSValue valueWithCGRect:CGRectMake(10, 10, 10, 10)];
}
-(void)callFoo {
CGRect rect = [[self foo] CGRectValue];
NSLog(@"%@",NSStringFromCGRect(rect));
}
Run Code Online (Sandbox Code Playgroud)
在我的测试用例中,
NSValue *rect = [NSValue valueWithCGRect:CGRectMake(0, 0, 0, 0)];
[[[master expect] andReturn:rect] foo];
Run Code Online (Sandbox Code Playgroud)
更新:
这看起来像内存的问题[但我不确定,只是一个猜测].
如果我用2 CGFloat变量创建一个结构,模拟方法将给我正确的结构,而如果我用2 double变量或3 CGFloat变量创建结构它会崩溃.
有趣:)