Ho definito alcuni timestamp per gli eventi nel database come auto_now_add
, poiché le informazioni devono essere memorizzate con la data e l'ora nello stesso momento in cui è archiviato l'evento.Sovrascrivi auto_now per unittest
La descrizione degli eventi è qualcosa di simile
class NewEvent(models.Model):
'''
Individual event
'''
name = models.CharField(max_length=100)
quantity = models.FloatField(null=True)
timestamp = models.DateTimeField(auto_now_add=True)
Per testare il modulo, sto generando alcune informazioni nel database nel file test.py
, in questo modo:
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()
devo generare eventi con il timestamp di ieri (il modulo li riepiloga quindi). Il problema è che non puoi sovrascrivere il timestamp. Il timestamp è quello in cui viene prodotto l'evento, lo documentation lo afferma in modo molto chiaro.
Quindi, come generare dati con timestamp appropriati per il test? Ho avuto diverse idee:
- Forse generare i dati del database in un modo diverso, al di fuori delle classi del modello. Dove e come?
- In qualche modo definire una classe differente o modificare la classe di comportarsi in modo diverso durante il test, qualcosa di simile a
_
if testing:
timestamp = models.DateTimeField(auto_now_add=True)
else:
timestamp = models.DateTimeField(auto_now_add=False)
O forse c'è un modo ancora più semplice per fare questo ... Tutte le idee?
In merito a 'timestamp = models.DateTimeField (auto_now_add = testing)' come semplificazione? –
La variabile 'testing' sarà True se test? Sarà fantastico, ma in questo caso dovrebbe essere qualcosa come "auto_now_add = non testing", penso ... – Khelben
È la tua domanda e il tuo esempio, sentiti libero di risolverlo. –