Come si scrivono i test per i metodi che interagiscono con i dati nei file di sistema?

6

Sto provando a essere proattivo riguardo alla scrittura di un'app per iOS in modo guidato dai test. Tuttavia, sono perplesso su come testare un metodo che è quello di interagire con i file di sistema reali. Per chi ha familiarità con iOS, sto scrivendo sul file NSUserDefaults .

Ecco il mio set-up: ho un singleton chiamato AppState che sto usando per registrare quando i dati scaricati da Internet sono stati sincronizzati l'ultima volta localmente. Altre classi possono aggiornare la proprietà dateLastSynced di AppState . Sto sovrascrivendo il metodo setDateLastSynced per salvare quell'aggiornamento nel sistema in modo che sia persistente tra l'apertura e la chiusura dell'app:

- (void)setDateLastSynced:(NSDate *)dateLastSynced
{
    // update instance variable with new value
    _dateLastSynced = dateLastSynced;

    // store change to NSUserDefaults
    [[NSUserDefaults standardUserDefaults] setObject:dateLastSynced forKey:APP_STATE_DATE_LAST_SYNCED_KEY];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

Mi piacerebbe scrivere un test che verifichi che setDateLastSynced funzioni correttamente, ma non sono sicuro di come farlo senza sovrascrivere i dati già salvati nel sistema in NSUserDefaults .

    
posta H K 06.02.2015 - 00:35
fonte

1 risposta

5

Devi deridere o emulare, e hai due ottimi motivi per farlo.

  1. Devi prendere in giro o emulare qualsiasi parte del sistema con cui il tuo codice interagisce, precisamente perché:

    • Non vuoi modificare il sistema e
    • Non vuoi che i tuoi test dipendano da qualcosa di incontrollabile come il sistema.

      Sì, la tua emulazione non sarà perfetta; sì, di fatto modellerai le tue conoscenze e le tue ipotesi su come funziona il sistema; e va benissimo Prendi essenzialmente una specifica e la riduci nel codice: niente di sbagliato in questo. Le specifiche in questo caso sono scritte dai creatori del sistema operativo e non da te.

  2. Devi imitare o emulare tutto ciò che riguarda il tempo, anche le tue cose.

    • Devi essere in grado di impostare l'ora dell'emulazione su una certa data falsa, fingere che i file siano creati / modificati, e quindi controllarne la data di creazione / modifica e assicurarsi che sia la data falsa, e tutto questo senza Ovviamente cambiando l'orologio di sistema.
    • Devi anche essere in grado di verificare che una certa data in futuro sia impostata correttamente, o che qualcosa accada in quel momento, tutto durante l'esecuzione di un singolo test, senza dover attendere in tempo reale per avanzare .
risposta data 11.02.2015 - 22:18
fonte

Leggi altre domande sui tag