Une minute
Mocker un datetime .now() dans un test unitaire Python
La fonction datetime.now() peut parfois “poser problème” dans les tests unitaires. En effet, lorsqu’on veut comparer le résultat d’une fonction comportant une date (now) à un objet pré-défini expected, cela peut poser problème…
Si on essaye de patcher la fonction today() ou now() comme ceci
@mock.patch('datetime.date.today')
def test():
datetime.date.today.return_value = date(2010, 1, 1)
print datetime.date.today()
cela ne fonctionnera pas car les types built-in sont immutables.
On aura alors une erreur du genre: TypeError: can't set attributes of built-in/extension type 'datetime.date'
Pour contourner ce “problème”, on peut utiliser le module freezegun
.
Example:
from freezegun import freeze_time
@freeze_time("2021-02-23")
def test_my_function():
from datetime import datetime
print(datetime.now()) # 2021-02-23 00:00:00
from datetime import date
print(date.today()) # 2021-02-23