Penso che questa sia la domanda sbagliata. Delegati, KVO e notifiche possono essere tutti testati unitamente. Questo non dovrebbe essere il problema principale quando scegli come interagire gli oggetti tra loro.
Scegli il modello appropriato per il problema che stai cercando di risolvere. Ad esempio, Apple utilizza i delegati per consentire a UITableView di estrarre informazioni da un controller. Questo sembra appropriato. La vista tabella sa di quali informazioni ha bisogno e estrae le informazioni dai suoi delegati.
Apple avrebbe potuto scegliere di inviare notifiche UITableView. Non vi è alcun motivo tecnico per cui una vista tabella non invii un UITableViewCellForRowAtIndexPathNotification e si aspetti che un sottoscrittore imposti la cella in un percorso dell'indice incluso nelle informazioni utente. Non l'hanno fatto perché non è appropriato.
In generale, i delegati sono appropriati per estrarre informazioni da una fonte di verità. Le viste lo usano per raccogliere i dettagli necessari per la visualizzazione. La notifica e la KVO sono appropriate per spingere le informazioni fuori da una fonte di verità. I modelli lo usano per annunciare le modifiche di cui il resto del sistema potrebbe aver bisogno di sapere.
Aggiorna
Dopo aver letto di nuovo la tua domanda, sembra che tu voglia usare KVO. Per quanto riguarda il codice di un test unitario, ecco un codice per dimostrare come questo può essere fatto.
Presumo che stai cercando di testare un controller che sta osservando una modifica a una proprietà di un modello. Quando si osserva la modifica, il controller cambia il testo di una vista. Il controller avrà proprietà denominate model e textView. Il modello avrà un nome di proprietà prop. TextView avrà una proprietà denominata testo. Il controller esegue KVO chiamando [self addObserver:self forKeyPath:@"model.prop" options:0 context:NULL]
.
FakeModel *fakeModel = [[FakeModel alloc] init]; // FakeModel stubs out the needed functionality of Model.
FakeTextView *fakeTextView = [[FakeTextView alloc] init]; // FakeTextView stubs out the needed functionality of TextView.
Controller *controller = [storyboard instantiateViewControllerWithIdentifier:@"controller"]; // Or however you create your controller.
controller.textView = fakeTextView;
controller.model = fakeModel;
fakeModel.prop = @"new value"; // Change model.prop to kick off the KVO and change textview.text.
STAssertEqualObjects(fakeTextView.text, @"expected new text", @"Text should have matched");
Ovviamente, puoi usare OCMock per questo, se lo hai nel tuo progetto.
Spero che ti aiuti.