我试图使用 freezegun 将时钟设置回 10 秒进行单元测试。
我发现使用 freezegun 将时间设置为现在会导致 datetime.datetime.now() 的预期行为,但 time.time() 的行为有所不同,因为“冻结”时间落后约 30,000 秒(8 小时)。
使用 datetime.datetime.utcnow(),它关闭 3600 秒(1 小时)。
我需要做什么才能适当地模拟要与 time.time() 一起使用的时间?
使用 now():休息 8 小时
def test_freezegun(self):
""" Test that freezegun can set time.time() back 10 seconds. """
with freezegun.freeze_time(datetime.datetime.now()):
print time.time()
print datetime.datetime.now()
print time.time()
print datetime.datetime.now()
# Output
[08:09:32] 1436339372
[08:09:32] 2015-07-08 08:09:32.119516
[08:09:32] 1436368172
[08:09:32] 2015-07-08 08:09:32.175031
使用 utcnow():休息 1 小时
def test_freezegun(self):
""" Test that freezegun can set time.time() back 10 seconds. """
with freezegun.freeze_time(datetime.datetime.utcnow()):
print time.time()
print datetime.datetime.now()
print time.time()
print datetime.datetime.now()
# Output
[08:08:56] 1436364536
[08:08:56] 2015-07-08 15:08:56.589202
[08:08:56] 1436368136
[08:08:56] 2015-07-08 08:08:56.655346
更新:
这行得通,但我想了解原因:
使用 utcnow() + 1 小时:与预期相同的 time.time() 输出
def test_freezegun(self):
""" Test that freezegun can set time.time() back 10 seconds. """
with freezegun.freeze_time(datetime.datetime.utcnow() + datetime.timedelta(hours=1)):
print time.time()
print datetime.datetime.now()
print time.time()
print datetime.datetime.now()
#Output
[08:22:27] 1436368947
[08:22:27] 2015-07-08 16:22:27.268315
[08:22:27] 1436368947
[08:22:27] 2015-07-08 08:22:27.339116