Python 注入Django进行测试和调试

Python 注入Django进行测试和调试,python,django,django-testing,Python,Django,Django Testing,我正在写一个应用程序,它严重依赖于日期和时间。我想对现在和今天有一个可注射的概念。我在想,我可以编写这两个函数的我自己的版本,这两个函数将检查一些中心设置,我现在将其称为“注入”。如果INJECTED_NOW为None,则上述函数将只返回datetime.datetime.NOW和datetime.date.today的值。但是,如果INJECTED_现在有一个datetime值,则上述函数将使用它来获取“现在”和“今天” 我想知道我现在怎么能存储你,使它是可变的。我希望能够在测试用例开始时设置

我正在写一个应用程序,它严重依赖于日期和时间。我想对现在和今天有一个可注射的概念。我在想,我可以编写这两个函数的我自己的版本,这两个函数将检查一些中心设置,我现在将其称为“注入”。如果INJECTED_NOW为None,则上述函数将只返回datetime.datetime.NOW和datetime.date.today的值。但是,如果INJECTED_现在有一个datetime值,则上述函数将使用它来获取“现在”和“今天”

我想知道我现在怎么能存储你,使它是可变的。我希望能够在测试用例开始时设置它,并在另一个测试用例之前修改它。类似地,我希望能够从请求中设置它,也许可以使用中间件


这种方法有意义吗?如果有,我现在应该如何存储?我想避免数据库访问。有解决此问题的其他方法吗?

最近发布了一个名为“冷冻枪”的库,它可以像您描述的那样指定日期时间:


这里有一种使用mock的方法,有关mock的更多信息,请参阅

这应该是您正在测试的代码 导入日期时间 def一分钟前: return datetime.datetime.now-datetime.timedeltaseconds=60.time 这将在您的测试文件中 导入模拟 导入系统 导入单元测试 类SomeTestcaseunittest.TestCase: def测试一分钟前自己: real\u datetime=datetime.datetime fake_now=datetime.datetime2012,12,21,11,13,13 使用mock.patch'datetime.datetime',spec=datetime.datetime作为datetime\u mock: datetime\u mock.now.return\u value=false\u now self.assertEqualone\u分钟前,datetime.time11,12,13 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': sys.exitunittest.main
要测试它,只需将代码复制到一个文件并用Python运行即可。

看看这个库,对于您这样的情况,它非常简单且有用。我知道mock,但我不确定如何覆盖内置的datetime.date.today或datetime.datetime.now函数。