Nell'attuale applicazione Cocoa su cui sto lavorando, ho un oggetto, RecordScheduler
, che risponde a due tipi di notifiche, "day did pass" e "quicksaving interval have pass". In entrambi i casi, RecordScheduler
indica a Recorder
di eseguire il suo lavoro di registrazione, tra le altre cose.
Ora voglio RecordScheduler
per emettere una registrazione quando il Mac si addormenta.
Ti iscrivi alle notifiche di sospensione / riattivazione tramite NSWorkspace
:
[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
selector:@selector(computerWillSleep:)
name:NSWorkspaceWillSleepNotification object:nil];
Questo è abbastanza facile. Aggiungilo a RecordScheduler
's -init
e le notifiche saranno elaborate in modo semplice.
Il fatto è che, per gli altri due casi, ho scritto metodi di supporto come fireDayDidPass()
da utilizzare nei test unitari. Ho attivato le mie notifiche personalizzate e ho aggiunto asserzioni per la risposta di RecordScheduler
. Funziona bene. Non mi sento a mio agio nel licenziare un NSWorkspaceWillSleepNotification
poiché (a) non è il mio e (b) non so alcun effetto collaterale.
Invece, ho fatto ricorso a chiamare [scheduler computerWillSleep:nil]
che avrebbe ricevuto le notifiche. Ora non ho un test intergration-ish per verificare RecordScheduler
sottoscrizioni a NSWorkspaceWillSleepNotification
.
Dopo aver scoperto che non sono state inviate ulteriori informazioni, ho abbandonato l'idea di creare un HibernationObserver
che sottoscriva le notifiche di NSWorkspace
e invia nuovamente il mio tipo di "Dormire" e "Ha fatto" Wake "notifiche. Non sembrava esserci alcun ulteriore vantaggio.
Ora ecco il punto:
- È ancora un test unitario quando lancio una notifica e asserisco sia per gli effetti collaterali della gestione della notifica che per la sottoscrizione del destinatario al momento dell'inizializzazione?
- In quale altro modo è possibile verificare se un oggetto si autoaccede come ricevitore di notifica?
- Dovrei prendere l'abitudine di avvolgere le notifiche di sistema nel mio?