Uso VS2008 per il targeting di .NET 2.0 Framework e, nel caso, no non posso modificare questo :)Come può essere modificata la "data odierna" ai fini del test unitario?
Ho una classe DateCalculator
. Il metodo GetNextExpirationDate
tenta di determinare la scadenza successiva, utilizzando internamente DateTime.Today
come data di riferimento.
Mentre stavo scrivendo i test di unità, mi sono reso conto che volevo testare GetNextExpirationDate
per le diverse date "oggi".
Qual è il modo migliore per farlo? Ecco alcune alternative che ho preso in considerazione:
- Esporre una proprietà/metodo sovraccarico con argomento
baselineDate
e utilizzarlo solo dal test dell'unità. Nel codice client effettivo, ignorare il metodo property/overloaded in favore del metodo che imposta automaticamentebaselineDate
inDateTime.Today
. Sono riluttante a farlo poiché rende l'interfaccia pubblica della classe DateCalculator scomoda. - Creare un campo protetto denominato
baselineDate
impostato internamente suDateTime.Today
. Quando si esegue il test, derivare un e impostarebaslineDate
tramite il costruttore. Mantiene l'interfaccia pubblica pulita, ma non è ancora eccezionale -baselineDate
è stato reso protetto e una classe derivata è richiesta, sia per il solo test. - Utilizzare i metodi di estensione. Ho provato questo dopo aver aggiunto il
ExtensionAttribute
, quindi ho capito che non avrebbe funzionato perché i metodi di estensione non possono accedere a variabili private/protette. Inizialmente pensavo che questa fosse una soluzione davvero piuttosto elegante. :(
Sarei interessato a sentire quello che pensano gli altri.
Buona domanda ... che sarebbe stato divertente per aspettare fino a una data specifica per la ricerca di un test in mancanza, perché si basano su ciò che 'oggi' è e non può incrementarlo :) – slugster
Duplicate: http: //stackoverflow.com/questions/2425721/unit-testing-datetime-now –
Grazie per tutti gli input. Anche l'approccio del fornitore di data e ora era qualcosa su cui avrei dovuto pensare. In questo caso, comunque, penso che andrò con l'approccio di Gishu - sembra essere il minimo lavoro e meno invasivo per me. –