sto cercando di scrivere i test per una classe che ha metodi come:Come prendere in giro python's datetime.now() in un metodo di classe per il test delle unità?
import datetime
import pytz
class MyClass:
def get_now(self, timezone):
return datetime.datetime.now(timezone)
def do_many_things(self, tz_string='Europe/London'):
tz = pytz.timezone(tz_string)
localtime_now = self.get_now(tz)
...
return things
voglio provarlo, e per farlo ho bisogno di fare in modo che la chiamata datetime.datetime.now()
restituisce qualcosa di prevedibile.
Ho letto molti esempi di utilizzo di Mock nei test, ma non ho trovato nulla di simile a quello che mi serve, e non riesco a capire come usarlo nei miei test.
Ho separato il metodo get_now()
nel caso fosse più facile prenderlo in giro, invece di datetime.datetime.now()
, ma sono ancora bloccato. Qualche idea su come scrivere UnitTests per questo usando Mock? (Questo è tutto in Django, FWIW, io non sono sicuro se questo fa la differenza in questo caso.)
Solo per FYI, non utilizzare mai un fuso orario pytz nel costruttore datetime. Usa invece 'localize'. –
Grazie Marco. Quindi invece di 'datetime.datetime.now (timezone)' dovrei fare 'timezone.localize (datetime.datetime.now())'? Qualche ragione particolare è meglio? –
A volte l'assegnazione diretta del fuso orario non funziona correttamente. Per un esempio vedere http://stackoverflow.com/questions/12808845/pytz-america-edmon-offset-wrong –