我正在尝试为一个具有以下方法的类编写测试:
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
我想要测试它,为此我需要确保 datetime.datetime.now()
调用返回的时间是可预测的。
我阅读了许多使用Mock进行测试的示例,但没有找到与我需要的完全相似的内容,并且我无法弄清楚如何在我的测试中使用它。
我将get_now()
方法分离出来,以便更容易模拟它,而不是datetime.datetime.now()
,但我仍然被卡住了。有关如何使用 Mock 编写此单元测试的任何想法吗?(这全部都是在 Django 中进行的,FWIW;我不确定这在本例中是否有所不同。)
timezone.localize(datetime.datetime.now())
而不是datetime.datetime.now(timezone)
?有什么特别的原因吗? - Phil Gyfordlocalize()
仅用于简单的“naive datetimes”。因此,如果now()
是 2012-10-26 15:00:00(没有时区),那么它只是将指定的时区应用于它;它不会转换时间。由于我想在特定时区获取实际时间,所以我认为需要执行以下操作:datetime.datetime.now(pytz.utc).astimezone(timezone)
。 - Phil Gyford