Próbuję napisać testy dla klasy, która ma metody, takie jak:Jak wyśmiać Pythona datetime.now() w metodzie klasy do testowania jednostkowego?
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
chcę go przetestować, a do tego muszę się upewnić, że wywołanie datetime.datetime.now()
zwraca coś przewidywalnego.
Czytałem dużo przykładów używania testów w Mock, ale nie znalazłem niczego tak bardzo, jak potrzebuję i nie mogę się dowiedzieć, jak z nich korzystać w moich testach.
Wyodrębniłem metodę get_now()
na wypadek, gdyby łatwiej było to udawać, zamiast datetime.datetime.now()
, ale nadal jestem zakłopotany. Wszelkie przemyślenia na temat pisania UnitTests do tego przy użyciu Mock? (To wszystko w Django, FWIW; nie jestem pewien, czy to robi różnicę w tym przypadku).
Po prostu dla FYI, nigdy nie używaj strefy czasowej pytz w konstruktorze datetime. Zamiast tego użyj 'localize'. –
Dzięki Mark. Więc zamiast 'datetime.datetime.now (timezone)' powinienem zrobić 'timezone.localize (datetime.datetime.now())'? Czy jakiś szczególny powód jest lepszy? –
Czasami przypisanie strefy czasowej bezpośrednio nie działa poprawnie. Na przykład zobacz http://stackoverflow.com/questions/12808845/pytz-america-edmon-offset-wrong –