Domanda

Attualmente sto scrivendo una semplice mini app basata su timer in C# che esegue un'azione n volte ogni k secondi.
Sto cercando di adottare uno stile di sviluppo basato sui test, quindi il mio obiettivo è testare tutte le parti dell'app.

Quindi, la mia domanda è:Esiste un buon modo per testare un'unità di una classe basata su timer?

Il problema, per come la vedo io, è che c’è un grosso rischio che i test richiedano un tempo insopportabilmente lungo per essere eseguiti, dal momento che devono aspettare così e così a lungo prima che si verifichino le azioni desiderate.
Soprattutto se si vogliono dati realistici (secondi), invece di utilizzare la risoluzione temporale minima consentita dal framework (1 ms?).
Sto utilizzando un oggetto fittizio per l'azione, per registrare il numero di volte in cui l'azione è stata richiamata e in modo che l'azione non richieda praticamente tempo.

È stato utile?

Soluzione

Quello che ho fatto è deridere il timer, e anche l'ora corrente del sistema, in modo che i miei eventi potessero essere attivati ​​immediatamente, ma per quanto riguarda il codice in prova il tempo trascorso era di secondi.

Altri suggerimenti

Penso che quello che farei in questo caso è testare il codice che viene effettivamente eseguito quando il timer scorre, piuttosto che l'intera sequenza.Ciò che devi veramente decidere è se vale la pena testare il reale comportamento dell'applicazione (ad esempio, se ciò che accade dopo ogni tick cambia drasticamente da un tick all'altro), o se è sufficiente (vale a dire , l'azione è sempre la stessa) solo per testare la tua logica.

Poiché è garantito che il comportamento del timer non cambierà mai, funzionerà correttamente (ovvero, lo avrai configurato correttamente) oppure no;sembra che sia uno sforzo sprecato includerlo nel test se non ne hai effettivamente bisogno.

Sono d'accordo con Danny nella misura in cui probabilmente ha senso dal punto di vista del test unitario dimenticare semplicemente il meccanismo del timer e verificare semplicemente che l'azione stessa funzioni come previsto.Vorrei anche dire che non sono d'accordo sul fatto che includere la configurazione del timer in una suite di test automatizzata di qualche tipo sia uno sforzo inutile.Ci sono molti casi limite quando si tratta di lavorare con applicazioni di cronometraggio ed è molto facile creare un falso senso di sicurezza testando solo cose facili da testare.

Consiglierei di avere una serie di test che eseguano il timer e l'azione reale.Questa suite richiederà probabilmente un po' di tempo per essere eseguita e probabilmente non sarà qualcosa che eseguiresti sempre sul tuo computer locale.Ma impostare questo tipo di cose su una build automatizzata notturna può davvero aiutare a sradicare i bug prima che diventino troppo difficili da trovare e risolvere.

Quindi, in breve, la mia risposta alla tua domanda è: non preoccuparti di scrivere alcuni test che richiedono molto tempo per essere eseguiti.Testa l'unità ciò che puoi e fai in modo che la suite di test venga eseguita velocemente e spesso, ma assicurati di integrarla con test di integrazione che vengono eseguiti meno frequentemente ma coprono una parte maggiore dell'applicazione e della sua configurazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top