0

freeze-time用来运行我的 pythonunittest测试用例。

一个虚拟测试用例:

@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 而不是冻结日期。当它是一个 lambda 时它正在工作GET_CURRENT_TIME,但这会导致我的代码的时间戳不同,这是我不想要的。

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

4

1 回答 1

1

您的测试代码是在您的测试功能之前导入的,因此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'

于 2020-06-03T05:44:10.543 回答