In che modo le date vengono generalmente gestite con i test?

6

Sto scrivendo un'app al momento che ha una logica di business piuttosto ampia basata su date. Ho centinaia di migliaia di dischi da testare e tester che vogliono vedere come vengono gestiti quei dischi, che finora ha funzionato bene, tuttavia alcuni casi limite sono difficili da replicare. La ragione è che la maggior parte della logica è legata alla data odierna, in un modo o nell'altro. Qual è il modo migliore per gestirlo con entrambi i test unitari e per i test tradizionali? L'unico modo in cui posso davvero pensare è che la data di oggi sia falsificata e risolta.

    
posta Morgan Herlocker 14.10.2011 - 17:46
fonte

4 risposte

3

Puoi usare i mock (dependency injection) per restituire la data "oggi" per essere quello che vuoi che sia. Questo ti permetterà di verificare le date dei problemi e assicurarti che le nuove aggiunte non infrangeranno il vecchio codice.

Ci sono molti schemi di derisione e sono sicuro che il linguaggio che stai usando ha almeno un paio di buoni.

    
risposta data 14.10.2011 - 18:27
fonte
4

Faking e fissare la data sono il modo giusto per farlo. Può effettivamente trasformarsi in una funzionalità utile: quante volte hai voluto essere in grado di eseguire una logica utilizzando dati passati?

    
risposta data 14.10.2011 - 18:17
fonte
1

Di gran lunga la cosa più semplice è intercettare le chiamate di funzione che restituiscono la data corrente e, quando si esegue il test, restituire sempre la stessa data. La tecnica per farlo varia in base alla lingua di implementazione.

    
risposta data 14.10.2011 - 18:17
fonte
0

Dipende anche da cosa stai provando. Ho creato un database utilizzando JPA una sola volta e ho utilizzato il pacchetto JUnit. Avevo i campi "Da" e "A" per elaborare i campi e i campi erano in funzione fino a millisecondi perché erano necessari alcuni campionamenti veloci. Quello che posso raccomandare di testare inizialmente per qualsiasi cosa legata alla data sono:

1) Formato del formato data / ora (ad es. gg-MM-aaaa HH: MM: SS.sss) validità 2) Timestamp sanità mentale ("Oggi" restituisce quale data effettiva del computer è?)

Il pacchetto java.util.date è un pacchetto primitivo e mi aspetto che vengano collaudati bene per coprire ulteriori controlli di integrità. Le altre cose che terrò a mente mentre test sono:

1) Parsing 2) Fuso orario 3) Convalida l'input dell'utente (se si accettano date come input dell'utente). 4) Tipo mancata corrispondenza (hai intenzione di mantenere le date numeriche o stringa?)

Se stai usando C ++, Boost, QT, potresti avere alcuni test pronti per questi. Controlla anche UnitTest ++, xUnit per vedere cosa offrono in quest'area.

Questa è la cosa che ho usato per i test e ha funzionato bene per me:)

    
risposta data 21.06.2013 - 12:30
fonte

Leggi altre domande sui tag