Test: devo registrare le notifiche di sistema e inviarne una mia?

3

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?
posta ctietze 09.01.2014 - 16:06
fonte

1 risposta

1

Senza andare alle definizioni formali, il test dell'unità dovrebbe testare un'unità software (metodo == >). Questo è il test di sistema più basso che esegui.

Il test dell'unità dovrebbe essere il più leggero possibile e testare il sistema dal punto di vista dell'unità e non creare alcun wrapper né testare alcuna dipendenza del sistema. fare ciò creerebbe oggetti che non fanno parte della logica dell'unità e il test si sposta su aspetti più ampi sotto la definizione del test unitario.

La soluzione del problema è creare un altro livello di test (chiamiamolo "test dei componenti") in questo test è necessario testare l'integrazione tra i diversi componenti del sistema. Questo ti darebbe la possibilità di testare l'applicazione in un contesto e un aspetto più ampi, testare il comportamento di altri oggetti ecc.

Questo tipo di test può ancora utilizzare lo stesso framework di test che si usa per i test unitari. Al test dei componenti non penso che dovresti creare oggetti di test dedicati a causa del sovraccarico della manutenzione.

La creazione di oggetti dedicati è fondamentalmente il primo passo per creare un framework di test automatico e dovresti investire su di esso durante il test del contesto dell'applicazione e sopra (applicazione == > system == > network == > eco-system .. .).

Per capire dove ogni test appartiene a porsi domande sul contesto necessario per eseguire il test. Questo è in generale:

  • Contesto oggetto == > unit test (verifica)
  • Contesto oggetti diversi == > test dei componenti (verifica)
  • Contesto applicazione == > test dell'applicazione (convalida)
  • Contesto di diverse applicazioni == > Test di sistema (validazione)
  • contesto client-server == > test di sistema avanzati (validazione)
  • Eco-System == > Test di sistema avanzati (convalida)

Ogni contesto ha le sue caratteristiche. È necessario analizzare ciascuno di essi e creare un mix per il miglior ROI.

In ogni caso, non ti consiglio di investire molto sui test di verifica - qualsiasi quadro di test unitario esistente dovrebbe rispondere a gran parte delle tue esigenze - devi solo averne familiarità.

    
risposta data 20.01.2014 - 14:45
fonte

Leggi altre domande sui tag