Como fazer blocos de teste de unidade em Obj-C

Os testes de unidade em Objective-C usando a estrutura de teste padrão não irão esperar que um bloco embutido seja executado. Mas eles, como testar blocos? Use este truque abaixo!

#define TestNeedsToWaitForBlock() __block BOOL blockFinished = NO
#define BlockFinished() blockFinished = YES
#define WaitForBlock() while (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, true) && !blockFinished)

Exemplo:

- (void)testWaitForBlock {
TestNeedsToWaitForBlock();

[target selectorWithInlineBlock:^(id obj) {

// assertions

BlockFinished();
}];

WaitForBlock();
}