2012-04-03 20 views
6

Voglio scrivere alcuni casi di test per la mia app Web, ma in alcuni casi è stato bloccato come "Questo token dovrebbe essere scaduto tra 30 giorni". A nessuno piace aspettare 30 giorni prima che i test finiscano.Come scrivere testcase per testare cose come "30 giorni scadono"?

Ci sono anche altri casi, per quanto riguarda alcuni eventi in programma per accadere, come "Invia questo messaggio 2 settimane dopo che l'utente sign up", "Genera un disegno di legge 2 giorni prima della prossima data di fatturazione", ecc

Quale suggerimento hai sulla scrittura di questi casi di test? O c'è un altro modo per assicurarsi che queste funzioni funzionino esattamente come progettato?

risposta

4

Il mio approccio durante la scrittura di questi test è definire la scadenza in millisecondi. In questo modo è possibile scrivere facilmente test perché gli ambienti di test possono definire una scadenza di 1 ms. L'ambiente di produzione definirà ovviamente la durata appropriata. In genere questi possono essere impostati come valori di configurazione o valori di db.

+0

Concordato. Saranno realisticamente necessarie regole diverse in Dev e QA rispetto alla produzione per poter testare questo tipo di casi. – mydoghasworms

0

Interrompere la funzionalità e testare i singoli passaggi.

La scadenza di un articolo dopo un determinato periodo di tempo consiste nel mettere l'oggetto da qualche parte con un timestamp di scadenza e un'altra parte del programma in scadenza con un vecchio timestamp. Di conseguenza, verifica che i nuovi articoli siano inseriti correttamente con il timestamp corretto e che il codice di scadenza rimuova correttamente gli elementi che hanno 30 giorni o più. L'elemento inserito e rimosso non deve essere lo stesso per il gusto del test.

Lo stesso vale per l'e-mail inviata dopo un determinato intervallo.

1

mi si supponga di avere un po 'di codice come

if(token.ExpirationDateTime > DateTime.Now) 
{ 
    // do some job to expire 
} 

solito forniscono le classi con tale logica, con un campo di iniezione di tipo Func<DateTime>. Per esempio

public class ExpirationManager 
{ 
    private Func<DateTime> _nowProvider; 

    public ExpirationManager(Func<DateTime> nowProvider) 
    { 
    _nowProvider = nowProvider; 
    } 
} 

Quindi il codice di scadenza sembra

if(token.ExpirationDateTime > _nowProvider()) 
{ 
    // do some job to expire 
} 

In questo modo è possibile sostituire la vera ora di sistema corrente con qualunque DataTime che vuoi quando si fa test (per esempio test di unità).

Problemi correlati