冻结时间在调用的函数中不起作用

2024-10-01 02:27:20 发布

您现在位置:Python中文网/ 问答频道 /正文

# test.py
from freezegun import freeze_time
from actual import DummyClass

class DummyClassMock(DummyClass):
   def some_function(self):
     # does something


class TestClass():
   def setUp(self):
      self.dummy = DummyClassMock()

   @freeze_time('2021-01-01')
   def test_dummy_function(self):
      self.assertTrue((self.dummy.dummy_function - datetime.utcnow()).total_seconds() >= 1)

# actual.py
from datetime import datetime, timedelta

class DummyClass():
   def dummy_function(self):
       return datetime.utcnow() + timedelta(5)

我的代码遵循上述结构。这样,如果我单独执行test_dummy_function,dummy_函数将返回2021-01-01,测试用例将通过。然而,当我将它与项目中的所有其他测试用例一起运行时,它失败了。内容也不是独立的


Tags: frompytestimportselfdatetimetimedef
1条回答
网友
1楼 · 发布于 2024-10-01 02:27:20

这不是一个特别好的解决方案,但是,我使用的解决方法是定义一个只返回datetime.utcnow()并模拟它的函数。我的测试用例将把冻结时间中使用的日期指定为返回值。看起来有点像

@mock.patch(actual.DummyClass.now_function)
 @freeze_time('2021-01-01')
   def test_dummy_function(self, mock_dt):
      now = datetime.utcnow()
      mock_dt.return_value = now
      self.assertTrue((self.dummy.dummy_function - now).total_seconds() >= 1)


# actual.py
Class DummyClass():
    def now_function():
        return datetime.utcnow()

    def dummy_function():
        return now_function()+timedelta(days=5)

相关问题 更多 >