从模拟方法崩溃返回CGRect

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];
,我想知道为什么这种崩溃是如果我们回到发生CGRectmocked 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变量创建结构它会崩溃.

有趣:)

Pra*_*iga 0

这似乎是中的一个错误OCMock。现在已修复。