2009-02-05 9 views
9

Estoy llegando a un bloqueo de carretera y me pregunto si las mentes colectivas brillantes aquí pueden ayudar. En ObjC CocoaTouch estoy tratando de burlarme de un objeto que toma los parámetros de estructura y devuelve una estructura. OCMock está tosiendo una bola de pelo, así que traté de envolver con un matcher Hamcrest. No murió. La función/método que estoy probando es como la siguiente:Usando una estructura con OCMock o Hamcrest

- (CLLocationCoordinate2D)pixelToLatLong:(CGPoint)aPoint; 

utilizo código como este:

#define OCMOCK_STRUCT(atype, variable) [NSValue value:&variable withObjCType:@encode(atype)] 
-(void) testMyWidget 
{ 
    CLLocationCoordinate2D ulLL = (CLLocationCoordinate2D){123,456}; 
    CLLocationCoordinate2D lrLL = (CLLocationCoordinate2D){654,321}; 
    [[[(id)myObj expect] andReturn:OCMOCK_STRUCT(CLLocationCoordinate2D, ulLL)] pixelToLatLong:(CGPoint){0,0}]; 
    [[[(id)myObj expect] andReturn:OCMOCK_STRUCT(CLLocationCoordinate2D, lrLL)] pixelToLatLong:(CGPoint){320,460}];//lower right point 
} 

que funciona un poco. Entonces, en mi objeto que estoy probando hago las ediciones necesarias necesarias para obtener una barra verde ... err ... botón verde en la ventana de información de construcción. Cuando estoy seguro de que mi prueba debería pasar, obtengo errores de afirmación fallida. Los errores me informan que el método se invocó inesperadamente y enumera los valores de estas estructuras como signos de interrogación. Traté de envolver las estructuras con los adaptadores de Hamcrest, pero no estoy llegando a ninguna parte. Me estoy preparando para sacar mi depurador que sin duda me mostrará lo que está mal. ¿Alguien aquí ha tenido problemas similares con OCMock/Hamcrest y structs? Si es así, ¿cuál es la mejor manera de manejar estos tipos?

Respuesta

0

En ocasiones, un simulacro codificado a mano es más fácil que intentar forzar un marco de objeto falso fuera de sus patrones de uso normales.

3

Estás muy cerca. Su #define debe ser:

#define OCMOCK_STRUCT(atype, variable) [NSValue valueWithBytes:&variable withObjCType:@encode(atype)] 
2

Tuve problemas con la respuesta macro; escribiendo una función auxiliar que devolvió la estructura en la clase de prueba y usando:

[[[mockObject stub] andCall:@selector(selectorName) onObject:self] someMethod]; 

funcionó muy bien.

Cuestiones relacionadas