当使用变量引用时间时,冻结时间测试用例失败

Freeze Time test cases fail when a variable is used to reference the time

我正在使用 freeze-time 来 运行 我的 python unittest 测试用例。

一个虚拟测试用例:

@freeze_time('2020-01-01')
def test_something(self):
  expected_output = {'time': '2020-01-01'}

  output = call_tested_code()

  self.assertEqual(expected_output, output)

主要代码/正在测试的代码:

GET_CURRENT_TIME = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S')

def call_tested_code():
  return {'time': GET_CURRENT_TIME}

这是失败的,因为输出给出的是 current_date 而不是冻结日期。 它在 GET_CURRENT_TIME 是 lambda 时工作,但这会导致我的代码有不同的时间戳,这是我不想要的。

如果需要任何其他信息,请随时发表评论。谢谢

您的测试代码在您的测试函数之前被导入,因此 GET_CURRENT_TIME 在您的 freeze_time 之前被评估,所以这就是问题所在。

要解决是在测试函数中导入 call_tested_code 还是将其放入 lambda 或其他可调用函数中,如您所述。

@freeze_time('2020-01-01')
def test_something(self):
    from package import call_tested_code # edit here with your correct import
    expected_output = {'time': '2020-01-01'}
    output = call_tested_code()
    self.assertEqual(expected_output, output)

此外,我认为您应该将预期输出更改为日期时间字符串,而不仅仅是日期,因为您的 GET_CURRENT_TIME 使用此格式 '%Y-%m-%d %H:%M:%S'.