właśnie praktykuje OCMock
problem jestem stoi tu jestWracając CGRect od sposobu wyśmiewali wywala
Mam jedną metodę o nazwie foo
która zwraca CGRect
, metoda ta jest wywoływana z innej metody callFoo
.
-(CGRect)foo {
return CGRectMake(10, 10, 10, 10);
}
-(void)callFoo {
CGRect rect = [self foo];
NSLog(@"%@",NSStringFromCGRect(rect));
}
Mój test jednostkowy dla metody callFoo
jest poniżej.
- (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];
}
Gdy ten przypadek testowy działa, jestem coraz nieoczekiwaną awarię gdy osiągnie CGRect rect = [self foo];
Chciałem wiedzieć, dlaczego tak się dzieje, jeśli awaria wracamy CGRect
od mocked method
i jak rozwiązać ten wypadek.
Czy ktoś może pomóc rozwiązać ten problem.
Z góry dziękuję.
P.S: Działa to dobrze, jeśli zmienię CGRect na NSValue. As shown below
-(NSValue *)foo {
return [NSValue valueWithCGRect:CGRectMake(10, 10, 10, 10)];
}
-(void)callFoo {
CGRect rect = [[self foo] CGRectValue];
NSLog(@"%@",NSStringFromCGRect(rect));
}
iw moim przypadku testowego,
NSValue *rect = [NSValue valueWithCGRect:CGRectMake(0, 0, 0, 0)];
[[[master expect] andReturn:rect] foo];
zmiana:
To wygląda problem z pamięcią [ale nie jestem pewien, tylko przypuszczenie].
Wyśmiewana metoda da mi prawidłową strukturę, jeśli stworzę strukturę z 2 CGFloat
zmienną, natomiast zawiesi się, jeśli utworzę strukturę ze zmienną 2 double
lub 3 CGFloat
.
Ciekawe :)
To wydaje się być błędem w OCMock.Kończy się to, że foo wskazuje na zerową implementację w ramach częściowej sztuczki (być może widziałeś, że jeśli zadzwonisz bezpośrednio do foo, możesz uzyskać test do zaliczenia). (Wprawdzie nie świetne) obejście byłoby postawić foo w innej klasie i kpić z tego. –
Nie jestem pewien, czy jest to błąd w OCMock, ale gdy próbowałem z niestandardowej struktury, która jest podobna do CGRect tj. struct zawiera dwie struktury (struct1 i struct2), które zawierają dwie zmienne. Ale wynik jest taki sam, rozbił się. Ale jeśli struktury, tj. Struct1 i struct2 zawierają tylko jedną zmienną, test przejdzie –
To był błąd w OCMock, który został naprawiony teraz: https://github.com/erikdoe/ocmock/pull/41 If spójrz na komentarze na temat żądania wyciągnięcia, zobaczysz, dlaczego wystąpiły problemy tylko z niektórymi (zwykle dużymi) strukturami. –