4

我试图使用 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
4

0 回答 0