J'ai un test Django où je dois moquer datetime.now(), parce que la vue qu'il utilise des tests datetime.now()Django test de simulation Datetime maintenant
J'utilise la bibliothèque maquette de Michael Foord, la version 1.0.1.
Je cherche une solution sans utiliser d'autres librairies comme freezegun. La plupart des exemples comme this et this importent le datetime et le remplacent, mais j'importe le datetime.datetime et j'essaye de le surcharger, et pour une raison quelconque cela ne fonctionne pas.
fonctionne datetime Redéfinition:
import mock
import datetime
class FixedDate(datetime.datetime):
@classmethod
def now(cls):
return cls(2010, 1, 1)
@mock.patch('datetime.datetime', FixedDate)
def myTest():
print(datetime.datetime.now())
myTest()
Mais je veux importer datetime.datetime et faire quelque chose comme ceci:
import mock
from datetime import datetime
class FixedDate(datetime):
@classmethod
def now(cls):
return cls(2010, 1, 1)
@mock.patch('datetime', FixedDate)
def myTest():
print(datetime.now())
myTest()
Cela provoque le TypeError: Besoin d'une cible valide patch. Vous avez fourni: 'datetime'.
La bibliothèque Mock indique également:
target should be a string in the form ‘package.module.ClassName’. The target is imported and the specified object replaced with the new object, so the target must be importable from the environment you are calling patch from.
est-il un moyen de chemin que le datetime et non le datetime.datetime?
Nb. J'ai vu aussi this exemple, mais cela ne fonctionnera pas pour moi, parce que je n'ai pas une fonction qui renvoie le datetime, mais ma vue utilise datetime.now()
pourquoi l'aide datetime permettent de remplacer vous datetime = FixedDate? –
erreur. l'a enlevé. – Kemeia