He definido algunas marcas de tiempo para eventos en la base de datos como auto_now_add
, ya que la información debe almacenarse con su marca de tiempo al mismo tiempo que se almacena el evento.Sobrescribir auto_now para unittest
La descripción de los hechos es algo así como
class NewEvent(models.Model):
'''
Individual event
'''
name = models.CharField(max_length=100)
quantity = models.FloatField(null=True)
timestamp = models.DateTimeField(auto_now_add=True)
Para probar el módulo, estoy generando alguna información en la base de datos en el archivo test.py
, de esta manera:
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()
debo generar eventos con su marca de tiempo de ayer (el módulo los resumirá). El problema es que no puede sobrescribir la marca de tiempo. La marca de tiempo es la indicada cuando se produce el evento, el documentation lo dice muy claramente.
Entonces, ¿cómo generar datos con las marcas de tiempo apropiadas para la prueba? He tenido varias ideas:
- Quizás genere los datos de la base de datos de una manera diferente, fuera de las clases del modelo. ¿Dónde y cómo?
- definen alguna manera una clase diferente o cambiar la clase a comportarse de manera diferente durante la prueba, algo así como
_
if testing:
timestamp = models.DateTimeField(auto_now_add=True)
else:
timestamp = models.DateTimeField(auto_now_add=False)
O tal vez hay una manera más fácil de hacer esto ... ¿Alguna idea?
¿Qué tal 'timestamp = models.DateTimeField (auto_now_add = testing)' como una simplificación? –
'prueba 'variable será verdadero si las pruebas? Eso será genial, pero en este caso, debería ser algo así como 'auto_now_add = not testing', creo ... – Khelben
Es su pregunta y su ejemplo, no dude en solucionarlo. –