Stavo solo praticando OCMock
, Il problema che sto affrontando qui èTornando CGRect dal metodo preso in giro si blocca
ho un metodo chiamato foo
che restituisce CGRect
, questo metodo viene chiamato da un altro metodo callFoo
.
-(CGRect)foo {
return CGRectMake(10, 10, 10, 10);
}
-(void)callFoo {
CGRect rect = [self foo];
NSLog(@"%@",NSStringFromCGRect(rect));
}
Il mio test di unità per callFoo
metodo è muggito.
- (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];
}
Quando questo tipo di test viene eseguito, sto ottenendo un incidente inaspettato quando raggiunge CGRect rect = [self foo];
volevo sapere perché questo incidente sta accadendo se torniamo CGRect
da mocked method
e come risolvere questo incidente.
Qualcuno potrebbe aiutare a risolvere questo problema.
Grazie in anticipo.
P.S: Funziona bene se sostituisco CGRect con NSValue. As shown below
-(NSValue *)foo {
return [NSValue valueWithCGRect:CGRectMake(10, 10, 10, 10)];
}
-(void)callFoo {
CGRect rect = [[self foo] CGRectValue];
NSLog(@"%@",NSStringFromCGRect(rect));
}
e nel mio caso di test,
NSValue *rect = [NSValue valueWithCGRect:CGRectMake(0, 0, 0, 0)];
[[[master expect] andReturn:rect] foo];
aggiornamento:
Questo appare come problema con la memoria [ma non sono sicuro, solo una supposizione].
metodo deriso mi darà corretta struttura se creo una struttura con 2 CGFloat
variabile, mentre andrà in crash se creo la struttura con 2 double
variabile o 3 CGFloat
variabile.
Interessante :)
Questo sembra essere un bug in OCMock.Finisce con il fare di punta a un'implementazione nulla all'interno della simulazione parziale (potresti aver visto che se chiami direttamente foo puoi far passare il test). Una (certamente non eccezionale) soluzione sarebbe quella di mettere il foo in una classe diversa e deriderlo. –
Non sono sicuro se si tratta di un bug in OCMock, ma quando ho provato con struct personalizzata che è simile a CGRect ie. struct contiene due struct (struct1 e struct2) che contiene due variabili in esso. Ma il risultato è lo stesso, si è schiantato. Ma se le struct ie struct1 e struct2 contengono solo una variabile al suo interno allora il test supererà –
Questo era un bug in OCMock, che è stato corretto ora: https://github.com/erikdoe/ocmock/pull/41 Se guardi i commenti sulla richiesta di pull, vedrai perché c'erano solo problemi con alcune (di solito grandi) strutture. –