2015-05-30 7 views
5

Voglio testare applicazioni dipendenti da molto tempo scritte in Java o C#.Equivalente Java o C# di Python freezegun o Timecop di Ruby

Esiste un equivalente Java o C# di Python Freezegun o Ruby Timecop?

+2

(Ho risposto piuttosto che votare per chiudere, perché credo che l'approccio migliore sia comunque di andare in un altro modo.In generale, domande come questa che richiedono consigli sulle biblioteche sono scoraggiate. Una domanda migliore potrebbe essere "Come posso testare il codice sensibile al tempo in Java? "o allo stesso modo per .NET.) –

risposta

4

Non è necessario disporre di una libreria separata per eseguire il test del codice basato sul tempo: è sufficiente considerare "il provider dell'ora corrente" come una dipendenza come qualsiasi altra cosa. Quindi evitare chiamate a new Date(), Calendar.getInstance() ecc in Java e DateTime.Now, DateTime.UtcNow ecc in .NET. Invece, creare un'interfaccia Clock o IClock per ottenere "l'ora corrente" e quindi creare una normale implementazione di esso che fa utilizzare l'orologio di sistema e un'implementazione falsa che consente di impostare l'ora. Questi sono abbastanza banali da scrivere e non necessitano di librerie di terze parti.

Inietti l'orologio in qualsiasi codice che ne ha bisogno come faresti con qualsiasi altra dipendenza, e quindi puoi fornire uno falso nei tuoi test senza problemi.

Infatti, in Java 8 è possibile utilizzare l'java.time API (che è molto meglio che usare Date e Calendar) e ha una classe astratta Clock - che comprende l'idea del fuso orario pure. In .NET probabilmente scriverei un'interfaccia e un'implementazione semplice basata su DateTime, ma sempre usando un tipo di UTC DateTime. Oppure usa il mio progetto Noda Time che viene fornito con l'interfaccia IClock e una versione di prova.

+0

Molte grazie per la risposta. Come posso utilizzare il tuo suggerimento per testare un'applicazione web Java in esecuzione in Tomcat di cui non ho accesso alla fonte? Potresti fornire un esempio? – user2602898

+0

@ user2602898: Non hai la fonte per l'app per cui stai scrivendo i test? Questa è una situazione molto insolita ... Se è stato scritto in un modo difficile da testare, non c'è molto che tu possa fare ... –