关于python:为了进行测试,我可以更改今天的日期吗?

Can I change today's date for the purposes of testing?

本问题已经有最佳答案,请猛点这里访问。

我有一个功能,根据今天的日期执行一些逻辑:

1
2
3
def do_work()
  todays_date = datetime.datetime.today().date()
  #do something based on todays_date

我想编写一些单元测试来验证这个函数是否在一年中的某几天完成了它应该做的事情。 有没有什么办法可以在不改变功能的情况下改变存储在todays_date中的值?

我怀疑没有,但只是想我会问。


在这种情况下,模拟模块可以派上用场。 该文档有一个关于如何部分模拟固定日期的示例。

1
2
3
4
5
6
7
8
>>> from datetime import date
>>> with patch('mymodule.date') as mock_date:
...     mock_date.today.return_value = date(2010, 10, 8)
...     mock_date.side_effect = lambda *args, **kw: date(*args, **kw)
...
...     assert mymodule.date.today() == date(2010, 10, 8)
...     assert mymodule.date(2009, 6, 8) == date(2009, 6, 8)
...