Para un juego que estoy desarrollando, tengo varias clases de modelo que activan las notificaciones cuando cambia su estado. Luego, la vista se suscribe a esas notificaciones y puede reaccionar ante ellas.OCUnit testing NSNotification delivery
Estoy haciendo mis pruebas unitarias para el modelo con OCUnit, y quiero afirmar que las notificaciones esperadas se publicaron. Por eso, estoy haciendo algo como esto:
- (void)testSomething {
[[NSNotificationCenter defaultCenter] addObserver:notifications selector:@selector(addObject:) name:kNotificationMoved object:board];
Board *board = [[Board alloc] init];
Tile *tile = [Tile newTile];
[board addTile:tile];
[board move:tile];
STAssertEquals((NSUInteger)1, [notifications count], nil);
// Assert the contents of the userInfo as well here
[board release];
}
La idea es que el NSNotificationCenter
agregará las notificaciones a la NSMutableArray
llamando a su método addObject:
.
Cuando lo ejecuto, sin embargo, veo que addObject:
se está enviando a algún otro objeto (no a mi NSMutableArray
) haciendo que OCUnit deje de funcionar. Sin embargo, si comento algún código (como las llamadas release
, o agrego una nueva prueba unitaria) todo comienza a funcionar como se esperaba.
Supongo que esto tiene que ver con un problema de temporización, o NSNotificationCenter
dependiendo del ciclo de ejecución de alguna manera.
¿Hay alguna recomendación para probar esto? Sé que podría agregar un colocador en Board
e inyectar mi propio NSNotificationCenter
, pero estoy buscando una forma más rápida de hacerlo (tal vez algún truco sobre cómo reemplazar el NSNotificationCenter
dinámicamente).
+1 para una manera inteligente de probar las notificaciones de la unidad! –