Ich habe einige Zeitstempel für Ereignisse in der Datenbank als auto_now_add
definiert, da die Informationen mit dem Zeitstempel der gleichen Zeit gespeichert werden sollen, zu der das Ereignis gespeichert wird.Auto_now für Unittest überschreiben
Die Beschreibung der Ereignisse ist so etwas wie
class NewEvent(models.Model):
'''
Individual event
'''
name = models.CharField(max_length=100)
quantity = models.FloatField(null=True)
timestamp = models.DateTimeField(auto_now_add=True)
das Modul zu testen, ich bin in der Datenbank in der test.py
Datei einige Informationen zu erzeugen, auf diese Weise:
for event in EVENT_TYPES:
time = datetime.datetime.now() - datetime.timedelta(days=1)
for i in range(48):
time = time.replace(hour=i/2)
NewEvent(name=event,
timestamp=time,
quantity=i).save()
muss ich erzeuge Ereignisse mit ihrem Zeitstempel von gestern (das Modul wird sie dann zusammenfassen). Das Problem ist, dass Sie den Zeitstempel nicht überschreiben können. Der Zeitstempel ist der Zeitpunkt, an dem das Ereignis produziert wird, das documentation gibt dies sehr deutlich an.
Also, wie man Daten mit geeigneten Zeitstempeln für das Testen erzeugt? Ich habe mehrere Ideen gehabt:
- Möglicherweise erzeugen Sie die Datenbankdaten auf eine andere Weise, außerhalb der Modellklassen. Wo und wie?
- Irgendwie eine andere Klasse definieren oder die Klasse ändert unterschiedlich während des Tests, so etwas wie
_
if testing:
timestamp = models.DateTimeField(auto_now_add=True)
else:
timestamp = models.DateTimeField(auto_now_add=False)
Vielleicht verhält es gibt eine noch einfachere Art und Weise, dies zu tun ... Irgendwelche Ideen?
Wie wäre es mit 'timestamp = models.DateTimeField (auto_now_add = testen)' als Vereinfachung? –
'test' Variable wird True sein, wenn Sie testen? Das wird großartig, aber in diesem Fall sollte es so etwas wie 'auto_now_add = nicht testen' sein, denke ich ... – Khelben
Es ist Ihre Frage und Ihr Beispiel, fühlen Sie sich frei, es zu reparieren. –