Я просто практиковался 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
, и как решить этот сбой.
Может ли кто-нибудь помочь решить эту проблему.
Заранее спасибо.
P.S. Это прекрасно работает, если я заменю CGRect на NSValue. 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];
обновление:
Это похоже на проблему с памятью [но я не уверен, просто предположение].
Метод mocked даст мне правильную структуру, если я создам структуру с 2 переменными CGFloat
, тогда как он выйдет из строя, если я создам структуру с 2 переменными double
или 3 переменными CGFloat
.
Интересно :)