Sé cómo resolver los problemas de EXC_BAD_ACCESS, pero no estoy seguro de cómo probarlo unitariamente. ¿Hay alguna forma de capturar EXC_BAD_ACCESS en código en lugar de simplemente colgar?¿Cómo pruebo la unidad para EXC_BAD_ACCESS?
Aquí es por lo que pido: He escrito una biblioteca que se utiliza mucho bloques, así:
- (void)doSomething:(void (^)())myBlock;
En mi aplicación de doSomething:
Voy a correr el tiempo del bloque, así:
myBlock();
Si una persona pasa a cero en el caso de la manzana, entonces se bloqueará con EXC_BAD_ACCESS
, por lo que la solución es comprobar que existe el bloque, así:
if (myBlock) {
myBlock();
}
Este cheque nil es bastante fácil de olvidar, así que me gustaría una forma de escribir una prueba unitaria que falla cuando se produce el bloqueo. Supongo que un bloqueo podría considerarse una falla de prueba, pero creo que sería mejor para otros que intentan ejecutar las pruebas ver un mensaje de error agradable en lugar de un bloqueo. ¿Algunas ideas?
Esto es muy interesante. En el primer intento, termina fallando la prueba sin importar lo que haga, pero el proyecto está dirigido como una biblioteca estática Cocoa Touch, y al ejecutar las pruebas se lanza el simulador de iPhone. No creo que fork() vaya a funcionar allí, así que voy a probar esto como un objetivo de Mac/Cocoa y ver qué pasa. ¡Gracias! – greenisus
Ooh, sí, no sé si 'fork()' está incluso disponible en iOS, lo siento.También estoy teniendo problemas para hacer que esto funcione del todo bien; Lo actualizaré si descubro algo. –