Я просто практиковал OCMock
. Проблема, с которой я столкнулся, -
У меня есть один метод с именем foo
, который возвращает CGRect
, этот метод вызывается из другого метода callFoo
.
-(CGRect)foo {
return CGRectMake(10, 10, 10, 10);
}
-(void)callFoo {
CGRect rect = [self foo];
NSLog(@"%@",NSStringFromCGRect(rect));
}
Мой unit test для метода 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
.
Интересно:)