我只是在练习OCMock
,我在这里面临的问题是
我有一个名为foo
返回CGRect
的方法,这个方法是从另一个方法调用的callFoo
。
-(CGRect)foo {
return CGRectMake(10, 10, 10, 10);
}
-(void)callFoo {
CGRect rect = [self foo];
NSLog(@"%@",NSStringFromCGRect(rect));
}
我的方法单元测试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];
}
当这个测试用例运行时,当它到达时我遇到了意外的崩溃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));
}
在我的测试用例中,
NSValue *rect = [NSValue valueWithCGRect:CGRectMake(0, 0, 0, 0)];
[[[master expect] andReturn:rect] foo];
更新:
这看起来像是内存问题[但我不确定,只是猜测]。
如果我创建具有 2 个变量的结构,模拟方法将为我提供正确的结构,而如果我创建具有 2 个变量或 3 个变量CGFloat
的结构,它会崩溃。double
CGFloat
有趣的 :)